Quartz与Spring的集成【转】
2009-08-05 15:21
218 查看
2.1 Scheduler 总入口
<bean name="quartzScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties"/>
</bean>
quartz的详细配置在quartz.properties文件,具体配置见其注释或参考参考文档,一般默认即为JVM嵌入式Scheduler。也可以配置把任务执行情况存储于数据库中,即使服务器重起,也能保证任务计划正确执行。
比如定义12点运行任务的,如果12:05运行了一次,然后服务器在12:30重启,如果没有持久化,那还会重新运行一次。
可惜hsqldb不支持select * from foo for update 这样的行锁定sql语法,无法demo。
2.2 Trigger
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<!--朝九晚五工作时间内每半小时执行一次-->
<property name="cronExpression" value="0 0/30 9-17 *,* * ?"/>
</bean>
强大的cronTrigger,类似著名的cron表达式,方便我们任意的job控制的想法。
当然quartz也有简单的simpleTrigger,实现的东西就和jdk中的timer差不多了,另还有好几个其他的timer。详细请参考quartz 的文档。
2.3 POJO式定义
Spring中与quartz 的结合方式有两种,一种是以quartz本身的一些特性,没有很好的体现springside的一切都是pojo宗旨,这里暂且不谈,而springside中实现的是以pojo为job的一种做法,大致的配置如下:
<!-- 使用pojo来做job,指定pojo和method -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="bookStockChecker"/>
<property name="targetMethod" value="check"/>
</bean>
2.4 小心陷阱
1. 启动计划的FactoryBean们不要lazy-load,否则计划无法启动。
2. Scheduler 不要
Autowire,否则会传入一个DataSource/SessionFactory给Scheduler,Scheduler就会认为是许要持久化任
务执行情况,而其实你是JVM形式执行的,就会报没有建立Quartz持久化表,Table or View not Found。
3. Quartz相对于JDK Timer Task的进步
1. 首先是细致的Cron语法;
2. 然后是可以把任务执行情况存储于数据库中,即使服务器重起,也能保证任务计划正确执行,详见2.1 Scheduler 总入口;
3. 还有线程池并发执行的能力;
4. 还有群集执行的能力。
以上特征都可以在quartz的配置文件quartz.properties里看出样貌。
4.常见问题
4.1 如何在Spring配置文件里如何设定定时执行函数的参数?
这是个伪问题,定时执行的函数应该是无参的。正确的方法设定该POJO的成员变量,或者由POJO自行去读取某个配置文件
<bean name="quartzScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties"/>
</bean>
quartz的详细配置在quartz.properties文件,具体配置见其注释或参考参考文档,一般默认即为JVM嵌入式Scheduler。也可以配置把任务执行情况存储于数据库中,即使服务器重起,也能保证任务计划正确执行。
比如定义12点运行任务的,如果12:05运行了一次,然后服务器在12:30重启,如果没有持久化,那还会重新运行一次。
可惜hsqldb不支持select * from foo for update 这样的行锁定sql语法,无法demo。
2.2 Trigger
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<!--朝九晚五工作时间内每半小时执行一次-->
<property name="cronExpression" value="0 0/30 9-17 *,* * ?"/>
</bean>
强大的cronTrigger,类似著名的cron表达式,方便我们任意的job控制的想法。
当然quartz也有简单的simpleTrigger,实现的东西就和jdk中的timer差不多了,另还有好几个其他的timer。详细请参考quartz 的文档。
2.3 POJO式定义
Spring中与quartz 的结合方式有两种,一种是以quartz本身的一些特性,没有很好的体现springside的一切都是pojo宗旨,这里暂且不谈,而springside中实现的是以pojo为job的一种做法,大致的配置如下:
<!-- 使用pojo来做job,指定pojo和method -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="bookStockChecker"/>
<property name="targetMethod" value="check"/>
</bean>
2.4 小心陷阱
1. 启动计划的FactoryBean们不要lazy-load,否则计划无法启动。
2. Scheduler 不要
Autowire,否则会传入一个DataSource/SessionFactory给Scheduler,Scheduler就会认为是许要持久化任
务执行情况,而其实你是JVM形式执行的,就会报没有建立Quartz持久化表,Table or View not Found。
3. Quartz相对于JDK Timer Task的进步
1. 首先是细致的Cron语法;
2. 然后是可以把任务执行情况存储于数据库中,即使服务器重起,也能保证任务计划正确执行,详见2.1 Scheduler 总入口;
3. 还有线程池并发执行的能力;
4. 还有群集执行的能力。
以上特征都可以在quartz的配置文件quartz.properties里看出样貌。
4.常见问题
4.1 如何在Spring配置文件里如何设定定时执行函数的参数?
这是个伪问题,定时执行的函数应该是无参的。正确的方法设定该POJO的成员变量,或者由POJO自行去读取某个配置文件
相关文章推荐
- spring4集成quartz2.2.1(maven)
- spring2.0 集成 quartz 问题解决方案
- 【JAVA秒会技术之搞定Quartz定时任务】Quartz在Spring中的集成与应用
- spring集成 quartz
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Quartz总结(一):Quartz集成Spring的2个方法
- Quartz与Spring集成的2种方式
- Spring集成Quartz有2种方法:
- Spring3.2.4集成quartz2.2.1定时任务(demo).
- Spring集成quartz任务调度框架
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Spring 4 + Quartz 集成举例
- spring集成动态Quartz帮助类
- spring集成quartz定时任务(注解实现)
- Spring Boot Quartz集成(二)
- spring集成quartz定时器的使用
- spring3.1集成quartz时,spring依赖注入无法注入到quartz的job中的处理方法
- Quartz的spring集成
- Quartz集成spring开发大全