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

Quartz进阶使用

2018年02月11日 ⁄ 综合 ⁄ 共 888字 ⁄ 字号 评论关闭

最近由于对Quartz调度任务要求比较高,总结了一下:

1.任务继承StatefulJob 和 Job接口,前者有状态,不会并发执行;后者无状态,支持并发;

2.其次对于Trigger Scheduler,Simple支持简单的类似java的TimerTask式的调度,Cron支持cron表达式 的复杂的周期调度;

3.对于quartz.properties文件,默认是先从classpath:quartz.properties寻找,之后从jar包org/quartz/quartz.properties;

4.对于Cron表达式调度,有misfire策略,设置如下:

CronTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity(triggerKey)
.withSchedule(
CronScheduleBuilder.cronSchedule(task.getCronExp())
.withMisfireHandlingInstructionDoNothing()
).build();

:如果一个任务每5分钟执行一次,当前00:05触发,任务执行需要6分钟,此时发生misfire事件(

The situation when Quartz was incapable of firing given trigger is called misfire

):当需要忽略错过的未执行的(00:10)设置策略是do_nothing,此时会以当前时间为基准设置下次启动是00:15.

此时还会有个坑:quartz.properties配置项org.quartz.jobStore.misfireThreshold = 60000 默认是1分钟。意思是如果任务执行了5分钟49秒,那么由于此时是00:10:49 ,与00:10有差值是49s小于 默认值一分钟,则处于00:10的任务会立即调起,这就是org.quartz.jobStore.misfireThreshold = 60000的作用!

5.附链接:http://www.tuicool.com/articles/ymMZNb

抱歉!评论已关闭.