1.背景
任务如果在暂停期间有本该触发的情况,但是由于被暂停了没有触发,那么在任务恢复的时候就会被检测到它misfire了。此时MisfireHandler线程就会根据添加任务时的misfire策略去处理它。但是如果想要忽略这种misfire的情况该怎么做呢,人为的暂停不算是misfire,遇到宕机,断电这种情况才算。
2.处理方法
在Quartz执行逻辑(七)任务的暂停和恢复中说到了,在resumeTrigger方法中如果nextFireTime小于当前时间则会调用updateMisfiredTrigger方法。所以只需要在此之前去更新trigger的nextFireTime即可。也就是加上以下代码:
OperableTrigger trigger = getDelegate().selectTrigger(conn, key);
if (trigger.getNextFireTime().getTime() < System.currentTimeMillis()) {
trigger.setNextFireTime(trigger.getFireTimeAfter(null));
}
JobDetail job = retrieveJob(conn, status.getJobKey());
storeTrigger(conn, trigger, job, true, status.getStatus(), false, false);
这部分代码的操作是先更新了trigger的ne