您的位置:首页 > 编程语言 > Java开发

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代码


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代码


<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代码


<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代码


<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代码


<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代码


<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="tringgers">

<list>

<ref bean="documentReplicationTrigger"/>

</list>

</property>

</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: