计划任务的顺序执行[Quartz Scheduler v.2.1.6]

使用Quartz做计划任务时,默认情况下,当前任务总会执行,无论前一个任务是否结束。从如下日志可以看出,job被并发执行,无视前面任务是否结束。

 

13:14:04,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:14:04,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - n=1
13:14:04,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 executing at Sun Apr 07 13:14:04 CST 2013
13:14:06,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:14:06,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - n=2
13:14:06,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 executing at Sun Apr 07 13:14:06 CST 2013
13:14:07,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 done.
13:14:08,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:14:08,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-3 - n=3
13:14:08,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-3 - group1.job1 executing at Sun Apr 07 13:14:08 CST 2013
13:14:09,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 done.

 

 

因此,如果采用默认条件,需要考虑并发执行的逻辑问题,否则需要设置为顺序执行。

 

第一种办法是为自定义的job加上@org.quartz.DisallowConcurrentExecution注解,告诉quartz不允许并发执行job任务。这个办法粗粒度地解决了并发问题,缺少灵活度,但很简单,也很简洁。

 

13:20:04,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:20:04,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - n=1
13:20:04,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 executing at Sun Apr 07 13:20:04 CST 2013
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 done.
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - n=2
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 executing at Sun Apr 07 13:20:07 CST 2013
13:20:10,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 done.

 

 

第二种办法是在job的执行方法体内编写处理代码

 

13:24:18,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:24:18,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - n=1
13:24:18,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 executing at Sun Apr 07 13:24:18 CST 2013
13:24:20,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:24:20,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - < 
13:24:21,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 done.
13:24:22,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:24:22,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-3 - n=2

 

相关测试代码:

 

测试类

job生产类

job类

 

最后需要注意的是,quartz的发展出现了分支,目前存在并行版本

spring与quartz1集成更友好

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值