spring之spring与Quartz整合(二)

spring之spring与Quartz整合(二)

----------

 

通过Spring的支持使用Quartz

 

在使用Quartz时,可以实现Job接口创建任务,并通过JobExecutionContext从任务数据Map中获取任务数据。为了将任务类从Quartz API中解耦出来,spring提供了QuartzJobBean,你可以对它进行扩展,以通过setter方法获取任务数据。QuartzJobBean将任务数据Map转换成属性,并通过setter方法进行注入。

如例:

Java代码   收藏代码
  1. package com.apress.springrecipes.replicator;  
  2. ...  
  3. import org.quartz.JobExecutionContext;  
  4. import org.quartz.JobExecutionException;  
  5. import org.springframework.scheduling.quartz.QuartzJobBean;  
  6.   
  7. public class FileReplicationJob extends QuartzJobBean{  
  8.     private FileReplicator fileReplicator;  
  9.     public void setFileReplicator(FileReplicator fileReplicator){  
  10.         this.fileReplicator = fileReplicator;  
  11.     }  
  12.     protected void executeInternal(JobExecutionContext context)  
  13.         throws JobExecutionException{  
  14.         try{  
  15.             fileReplicator.replicate();  
  16.         }catch(IOExdeption e){  
  17.             throw new JobExecutionException(e);  
  18.         }  
  19.     }  
  20. }  

 然后,就可以通过JobDetailBean在spring的Bean配置文件中配置Quartz JobDetail对象了。默认情况下,Spring是用这个Bean的名称作为任务名称的,也可以设置name属性对它进行修改。

Xml代码   收藏代码
  1. <bean name="documentReplicationJob"  
  2.     class="org.springframework.scheduling.quartz.JobDetailBean">  
  3.     <property name="jobClass"  
  4.         value="com.apress.springrecipes.replicator.FileReplicationJob"/>  
  5.     <property name="jobDataAsMap">  
  6.         <map>  
  7.             <entry key="fileReplicator" value-ref="documentReplicator"/>  
  8.         </map>  
  9.     </property>  
  10. </bean>  

spring还提供了MethodInvokingJobDetailFactoryBean,让你能够定义一个执行特定对象的单个方法任务。这样就替你免去了创建任务类的麻烦。可以用下面的任务细节来替换之前定义的细节。 

Xml代码   收藏代码
  1. <bean id="documentReplicationJob" class="org.springframework.scheduling.quartz.  
  2.     MethodInvokingJobDetailFactoryBean">  
  3.     <property name="targetObject" ref="documentReplicator"/>  
  4.     <property name="targetMethod" value="replicate"/>  
  5. </bean>  

你可以通过SimpleTriggerBean在spring的Bean配置文件中配置Quartz的SimpleTringger对象,它需要指JobDetail对象的引用。这个Bean为某些trigger属性提供了通用的默认值,例如用Bean名称作为任务名称,不限定重复次数等。 

Xml代码   收藏代码
  1. <bean id="documentReplicationTrigger"  
  2.     class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  3.     <property name="jobDetail" ref="documentReplicationJob"/>  
  4.     <property name="repeatInterval" value="60000"/>  
  5.     <property name="startDelay" value="5000"/>  
  6. </bean>  

你还可以通过CronTriggerBean在Bean配置文件中配置Quartz的CronTrigger对象。

Java代码   收藏代码
  1. <bean id="documentReplicationTrigger"  
  2.     class="org.springframework.scheduling.quartz.CronTriggerBean">  
  3.     <property name="jobDetail" ref="documentReplicationJob"/>  
  4.     <property name="cronExpression" value="0 30 17 * * ?"/>  
  5. </bean>  

最后,配置SchedulerFactoryBean实例来创建Scheduler对象,用于运行触发器。你可以在这个工厂Bean中指定多个

触发器。

Java代码   收藏代码
  1. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  2.     <property name="tringgers">  
  3.         <list>  
  4.             <ref bean="documentReplicationTrigger"/>  
  5.         </list>  
  6.     </property>  
  7. </bean>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值