现在的位置: 首页 > 综合 > 正文

在Spring中使用Quartz进行任务调度(4)

2013年02月10日 ⁄ 综合 ⁄ 共 1718字 ⁄ 字号 评论关闭

创建Trigger
    Quartz中另一个重要的组件就是Trigger,Spring按照相似的思路分别为SimpleTrigger和CronTrigger提供了更具Bean风格的SimpleTriggerBean和CronTriggerBean扩展类,通过这两个扩展类更容易在Spring中以Bean的方式配置Trigger。

    SimpleTriggerBean
    默认情况下,通过SimpleTriggerBean配置的Trigger名字即为Bean的名字,并属于默认组Trigger组。SimpleTriggerBean在SimpleTrigger的基础上,新增了以下属性:

    ● jobDetail:对应的JobDetail;
    ● beanName:默认为Bean的id名,通过该属性显式指定Bean名称,它对应Trigger的名称;
    ● jobDataAsMap:以Map类型为Trigger关联的JobDataMap提供值;
    ● startDelay:延迟多少时间开始触发,单位为毫秒,默认为0;
    ● triggerListenerNames:类型为String[],指定注册在Scheduler中的TriggerListener名称,以便让这些监听器对本触发器的事件进行监听。

    下面的实例使用SimpleTriggerBean定义了一个Trigger,该Trigger和jobDetail相关联,延迟10秒后启动,时间间隔为20秒,重复执行100次。此外,我们还为Trigger设置了JobDataMap数据:

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="2000" />
<property name="repeatCount" value="100" />
<property name="jobDataAsMap"><map>
<entry key="count" value="10" />
</map>
</property>
</bean>

    需要特别注意的是,①处配置的JobDataMap是Trigger的JobDataMap,任务执行时必须通过以下方式获取配置的值:

package com.baobaotao.quartz;
public class MyJob implements StatefulJob {
public void execute(JobExecutionContext jctx) throws JobExecutionException {
Map dataMap = jctx.getTrigger().getJobDataMap();①获取Trigger的JobDataMap
String count = dataMap.get("count");
dataMap.put(“count”,”30”) ② 对JobDataMap的更改不会被持久,不影响下次的执行
}
}

    CronTriggerBean

    CronTriggerBean扩展于CronTrigger,触发器的名字即为Bean的名字,保存在默认组中。在CronTrigger的基础上,新增的属性和SimpleTriggerBean大致相同,配置的方法也和SimpleTriggerBean相似,下面给出一个简单的例子:

<bean id="checkImagesTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail "/>
<property name="cronExpression" value="0/5 * * * * ?"/>
</bean>


抱歉!评论已关闭.