Spring+Quartz整合(2)之SimpleTrigger
来源:互联网 发布:淘宝云客服兼职考试 编辑:程序博客网 时间:2024/05/16 17:29
原文:http://xiaoye4188.iteye.com/blog/875900
下面先看一个实现了Job接口的任务HelloWorldJob:
package com.springQuartz.example;import java.util.Map;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloWorldJob implements Job{@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {Map properties = context.getMergedJobDataMap();System.out.println("Hello World!");System.out.println("Previous Fire Time: "+context.getPreviousFireTime());//上次触发任务的时间System.out.println("Current Fire Time: "+context.getFireTime());//当然触发时间System.out.println("Next Fire Time: "+context.getNextFireTime());//下次触发时间System.out.println(properties.get("message"));System.out.println();}}
这个Job输出"HelloWorld",同时输出上次、本次及下次触发的时间。
我们看一下在applicationContext.xml中的配置:
<bean id="job" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.springQuartz.example.HelloWorldJob"/><property name="jobDataAsMap"> <map> <entry key="triggerMessage" value="Job Message In JobDetail"/> <!--设置JobDetail中的值--> </map> </property></bean><bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job"/> <!--触发的job引用--> <property name="startDelay" value="1000"/> <!--设置延迟1秒后运行--> <property name="repeatInterval" value="10000"/> <!--设置每10秒触发一次--> <property name="jobDataAsMap"> <map> <entry key="triggerMessage" value="Job Message From Trigger"/> <!--设置Trigger中的值--> </map> </property></bean><bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref local="trigger"/></list></property></bean>
我们将HelloWorldJob实现成JobDetailBean类,并配置触发器simpleTriggerBean
最后我们的测试类:
2011-01-16 20:48:18,437 INFO - Starting Quartz Scheduler nowHello World!Previous Fire Time: nullCurrent Fire Time: Sun Jan 16 20:48:19 CST 2011Next Fire Time: Sun Jan 16 20:48:29 CST 2011Job Message From TriggerHello World!Previous Fire Time: Sun Jan 16 20:48:19 CST 2011Current Fire Time: Sun Jan 16 20:48:29 CST 2011Next Fire Time: Sun Jan 16 20:48:39 CST 2011Job Message From Trigger
下面说明几点:
1)首次触发是输出的Previous Fire Time为null
2)jobDataAsMap的说明:在HelloWorldJob.java中getMergedJobDataMap是JobDetail和Trigger上的JobDataMap的合并,两者数据如果冲突,则Trigger上的数据将覆盖JobDetail中的。运行结果也证明了,我们在Job中设置的值没有输出,而输出了"Job Message From Trigger"。
3)我们看到HelloWorldJob实现了Job接口,代码上依赖了Quartz的接口
下面我们讨论另外一种更普遍的,去除接口依赖的实现主要的applicationContext.xml文件的配置
<bean id="jobService" class="com.springQuartz.service.JobServiceImpl"></bean><bean id="invokeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject"><ref bean="jobService" /> <!--目标Job--></property><property name="targetMethod"><value>JobServiceImpl中的特定方法</value> <!--目标方法--></property><property name="concurrent"><value>false</value> <!--设置是否同步--></property></bean><bean id="jobServiceCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="invokeJob" /><property name="cronExpression" value="5/10 * * * * ?" /></bean><bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref local="jobServiceCronTrigger"/></list></property></bean>
1)首先我们配置具体的Job信息--JobServiceImpl,这个类可以不实现Quartz中的Job接口
2)最主要的MethodInvokingJobDetailFactoryBean,可以使得1)可行
3)相对于上面的例子,我们使用CronTriggerBean实现trigger,实现更灵活的时间配置
4)默认情况下,Quartz Jobs是无状态的,可能导致jobs之间互相的影响。如果你为相同的JobDetail
指定两个Trigger, 很可能当第一个job完成之前,第二个job就开始了。如果JobDetail
对象实现了Stateful
接口,就不会发生这样的事情。 第二个job将不会在第一个job完成之前开始。为了使得jobs不并发运行,设置MethodInvokingJobDetailFactoryBean
中的concurrent
标记为false
。
- Spring+Quartz整合(2)之SimpleTrigger
- Spring cronExpression Quartz 触发器(SimpleTrigger&CronTrigger ) 配置说明
- Quartz学习之Lesson5-SimpleTrigger
- Spring Quartz 定时器SimpleTrigger,CronTrigger配置说明
- quartz框架之spring整合
- spring之spring与Quartz整合(二)
- Quartz 触发器(SimpleTrigger&CronTrigger )配置说明
- Quartz学习(三)--简单触发器(SimpleTrigger)
- quartz入门(二)SimpleTrigger简单实例
- Spring 整合 Quartz (一)
- Quartz(三)整合spring
- Quartz 框架 教程(中文版)2.2.x 之第五课 SimpleTrigger
- Spring之十一 整合quartz触发器
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(九)之 spring中定时器quartz的整合
- Spring-----Spring整合Quartz
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(十一)之 spring中定时器quartz的整合续集(Quartz集群配置)
- 3. SimpleTrigger:quartz.properties
- 6.SimpleTrigger:quartz.properties
- asp.net2.0 mvc应用 IIS5.1服务器发布问题(整理版)
- C++ dynamic_cast小心得
- 游戏王千金囊开发实录二十 ——卡组下载
- Android中的延迟加载系列5 (综合案例 含完整代码及工程下载)
- 禁用鼠标右键脚本
- Spring+Quartz整合(2)之SimpleTrigger
- c#接口和抽象类的区别
- 开发第一个Mule项目——Hello World
- 2. Mule的实例运行
- Win64 Driver开发问题记录(三)
- C#读取AssemblyInfo文件中的AssemblyVersion中的值
- Mule的安装配置
- Android屏蔽锁屏功能
- MySQL可视化使用工具MySQL Workbench