quartz的中断恢复处理

使用jobstore来处理程序中断后的恢复
先看下几个处理时间点上的表状态

生成任务时会往job_details和triggers表插数据(这两个表关联的其它详细表就不多说了)
如果job还没开始执行时程序就中断了,
下次程序启动时会判断当前时间-预计执行时间是否小于misfireThreshold,是则正常执行,否则不执行了

如果是执行过程中中断呢?
job执行中时会往fired_triggers表插数据
如果这时程序中断,而job又设置了RequestsRecovery为true,则该job会被重新执行(不受misfireThreshold影响,因为根本就不是misfire)。
可以通过JobExecutionContext.isRecovering()来判断是否是recover,因为很多时候恢复的任务要先做一些清理工作。
如果RequestsRecovery为false,则不会恢复执行。

另外还有一点要注意,如果job设置了listener,则在jobWasExecuted执行完成后,任务相关的信息才会被从数据库里删除,表示真正执行完成。
如果job的execute执行完了,但在listener的jobWasExecuted()里程序出错或中断的话,quartz记录的任务状态还是运行中,下次任务还是会被恢复(RequestsRecovery=true)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值