`
yang7551735
  • 浏览: 45942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring 集成quartz:

阅读更多

Spring集成quartz配置思路:

 

    ·定义job: 有两种方式。方式一:Spring使用JobDetailBean类,继承QuartzJobBean,重写

                                                                protected void executeInternal(JobExecutionContext context)方法,

                                                                注入这个类和其依赖关系

                                                方式二:Spring使用MethodInvokingJobDetailFactoryBean,

                                                                任何一个普通类都可,

                                                                注入这个类,还有那个方法要定时

    ·将job放到触发器中,并定义什么时候触发

    ·将触发器加入触发列表,触发列表可以自动启动触发器 

 

举例(来源于Spring2.5的sample):

 

    1. schedulingContext-quartz.xml

 

<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
    
  <!-- 第一种定义job的方式:定义一个job  ListImagesQuartzJob -->
  <bean id="listImagesJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass" value="samples.imagedb.scheduling.ListImagesQuartzJob"/>
      <!-- 列出这个job的依赖组件 -->
      <property name="jobDataAsMap">
          <map>
              <entry key="imageDatabase" value-ref="imageDatabase"/>
              <entry key="mailSender" value-ref="mailSender"/>
              <entry key="mailFrom" value="${mail.from}"/>
              <entry key="mailTo" value="${mail.to}"/>
          </map>
      </property>
  </bean>
    
  <!-- 把上面的job加入到触发器 -->
  <bean id="listImagesTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
      <property name="jobDetail" ref="listImagesJobDetail"/>
      <property name="startDelay" value="10000"/><!--第一次执行在10秒后-->
      <property name="repeatInterval" value="10000"/><!--频度,每10秒执行一次-->
  </bean>
     
  <!-- 普通类配置,该类job会使用 -->
  <bean id="imageDatabase" class="samples.imagedb.DefaultImageDatabase">
    <property name="dataSource" ref="dataSource"/>
    <property name="lobHandler" ref="${imageDatabase.lobHandler}"/>
  </bean>
    
  <!--第二种定义job的方法:对已有类的某个方法,定义一个job,让它定时执行-->
  <bean id="checkImagesJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="imageDatabase"/>
    <property name="targetMethod" value="checkImages"/>
  </bean>
    
  <!-- 把上面的job加入到触发器 -->
  <bean id="checkImagesTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="checkImagesJobDetail"/>
    <property name="cronExpression" value="0/5 * * * * ?"/><!--精确地控制任务的运行时间-->
  </bean>
    
  <!-- 将触发器加入触发列表,将自动启动job-->
  <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
          <ref local="listImagesTrigger"/>
          <ref local="checkImagesTrigger"/>
        </list>
    </property>
  </bean>
</beans>

 

  2. ListImagesQuartzJob.java

 

public class ListImagesQuartzJob extends QuartzJobBean {
 private final Log logger = LogFactory.getLog(getClass());
 private ImageDatabase imageDatabase;
 private MailSender mailSender;
 private String mailFrom;
 private String mailTo;
 public void setImageDatabase(ImageDatabase imageDatabase) {
  this.imageDatabase = imageDatabase;
 }
 public void setMailSender(MailSender mailSender) {
  this.mailSender = mailSender;
 }
 public void setMailFrom(String mailFrom) {
  this.mailFrom = mailFrom;
 }
 public void setMailTo(String mailTo) {
  this.mailTo = mailTo;
 }
 
 protected void executeInternal(JobExecutionContext context) {
   //定义job内容
 }
}

 

   3. DefaultImageDatabase.java

 

  

public class DefaultImageDatabase {
 
//其他方法
 
 public void checkImages() {
  // job内容
 }
 
}

 

  cronExpression配置说明见http://yang7551735.iteye.com/blog/545397

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics