spring之spring与Quartz整合(二)
2015-06-11 10:02
585 查看
spring之spring与Quartz整合(二)
----------
通过Spring的支持使用Quartz
在使用Quartz时,可以实现Job接口创建任务,并通过JobExecutionContext从任务数据Map中获取任务数据。为了将任务类从Quartz API中解耦出来,spring提供了QuartzJobBean,你可以对它进行扩展,以通过setter方法获取任务数据。QuartzJobBean将任务数据Map转换成属性,并通过setter方法进行注入。
如例:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
package com.apress.springrecipes.replicator;
...
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class FileReplicationJob extends QuartzJobBean{
private FileReplicator fileReplicator;
public void setFileReplicator(FileReplicator fileReplicator){
this.fileReplicator = fileReplicator;
}
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException{
try{
fileReplicator.replicate();
}catch(IOExdeption e){
throw new JobExecutionException(e);
}
}
}
然后,就可以通过JobDetailBean在spring的Bean配置文件中配置Quartz JobDetail对象了。默认情况下,Spring是用这个Bean的名称作为任务名称的,也可以设置name属性对它进行修改。
Xml代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean name="documentReplicationJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.apress.springrecipes.replicator.FileReplicationJob"/>
<property name="jobDataAsMap">
<map>
<entry key="fileReplicator" value-ref="documentReplicator"/>
</map>
</property>
</bean>
spring还提供了MethodInvokingJobDetailFactoryBean,让你能够定义一个执行特定对象的单个方法任务。这样就替你免去了创建任务类的麻烦。可以用下面的任务细节来替换之前定义的细节。
Xml代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean id="documentReplicationJob" class="org.springframework.scheduling.quartz.
MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="documentReplicator"/>
<property name="targetMethod" value="replicate"/>
</bean>
你可以通过SimpleTriggerBean在spring的Bean配置文件中配置Quartz的SimpleTringger对象,它需要指JobDetail对象的引用。这个Bean为某些trigger属性提供了通用的默认值,例如用Bean名称作为任务名称,不限定重复次数等。
Xml代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean id="documentReplicationTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="documentReplicationJob"/>
<property name="repeatInterval" value="60000"/>
<property name="startDelay" value="5000"/>
</bean>
你还可以通过CronTriggerBean在Bean配置文件中配置Quartz的CronTrigger对象。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean id="documentReplicationTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="documentReplicationJob"/>
<property name="cronExpression" value="0 30 17 * * ?"/>
</bean>
最后,配置SchedulerFactoryBean实例来创建Scheduler对象,用于运行触发器。你可以在这个工厂Bean中指定多个
触发器。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="tringgers">
<list>
<ref bean="documentReplicationTrigger"/>
</list>
</property>
</bean>
----------
通过Spring的支持使用Quartz
在使用Quartz时,可以实现Job接口创建任务,并通过JobExecutionContext从任务数据Map中获取任务数据。为了将任务类从Quartz API中解耦出来,spring提供了QuartzJobBean,你可以对它进行扩展,以通过setter方法获取任务数据。QuartzJobBean将任务数据Map转换成属性,并通过setter方法进行注入。
如例:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
package com.apress.springrecipes.replicator;
...
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class FileReplicationJob extends QuartzJobBean{
private FileReplicator fileReplicator;
public void setFileReplicator(FileReplicator fileReplicator){
this.fileReplicator = fileReplicator;
}
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException{
try{
fileReplicator.replicate();
}catch(IOExdeption e){
throw new JobExecutionException(e);
}
}
}
然后,就可以通过JobDetailBean在spring的Bean配置文件中配置Quartz JobDetail对象了。默认情况下,Spring是用这个Bean的名称作为任务名称的,也可以设置name属性对它进行修改。
Xml代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean name="documentReplicationJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.apress.springrecipes.replicator.FileReplicationJob"/>
<property name="jobDataAsMap">
<map>
<entry key="fileReplicator" value-ref="documentReplicator"/>
</map>
</property>
</bean>
spring还提供了MethodInvokingJobDetailFactoryBean,让你能够定义一个执行特定对象的单个方法任务。这样就替你免去了创建任务类的麻烦。可以用下面的任务细节来替换之前定义的细节。
Xml代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean id="documentReplicationJob" class="org.springframework.scheduling.quartz.
MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="documentReplicator"/>
<property name="targetMethod" value="replicate"/>
</bean>
你可以通过SimpleTriggerBean在spring的Bean配置文件中配置Quartz的SimpleTringger对象,它需要指JobDetail对象的引用。这个Bean为某些trigger属性提供了通用的默认值,例如用Bean名称作为任务名称,不限定重复次数等。
Xml代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean id="documentReplicationTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="documentReplicationJob"/>
<property name="repeatInterval" value="60000"/>
<property name="startDelay" value="5000"/>
</bean>
你还可以通过CronTriggerBean在Bean配置文件中配置Quartz的CronTrigger对象。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean id="documentReplicationTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="documentReplicationJob"/>
<property name="cronExpression" value="0 30 17 * * ?"/>
</bean>
最后,配置SchedulerFactoryBean实例来创建Scheduler对象,用于运行触发器。你可以在这个工厂Bean中指定多个
触发器。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/b5540880ff7a28754f46745a9b354511.png)
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="tringgers">
<list>
<ref bean="documentReplicationTrigger"/>
</list>
</property>
</bean>
相关文章推荐
- springmvc elf8848
- Spring+Quartz整合
- Java拆箱装箱
- Java注释@interface的用法【转】
- struts2取值方法
- java中将点替换成File.separator
- java--遇到NoSuchMethodError通用解决思路
- java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect
- JAVA 计算地球上任意两点(经纬度)距离
- 2012年笔记-Struts2使用token标签防止重复提交
- Spring声明式事务配置管理方法
- java中包的学习
- MD5加密算法(java版)
- 关于IntelliJ IDEA 14控制台中文乱码问题
- Spring4新特性——泛型限定式依赖注入
- java自带线程池和队列详细讲解
- Java基础毕向东day04
- Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'o
- eclipse 中git解决冲突
- Java基础2