任务状态变化:waiting->blocked->executing->waiting
任务处理过程中,很多次执行任务后,查看任务触发器的状态为BLOCKED,将任务重置为初始状态在执行仍然BLOCKED ,使用的任务重置操作如下:
if (scheduler.checkExists(triggerKey)) {
trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
scheduler.pauseTrigger(trigger.getKey());
scheduler.unscheduleJob(trigger.getKey());
scheduler.deleteJob(trigger.getJobKey());
}
任务状态BLOCKED后,其实任务的状态还是 EXECUTING 的,查看QRTZ_FIRED_TRIGGER表中数据可知。
即使进行重置后,任务的执行状态仍然是EXECUTING,再次执行的任务触发器状态又变成BLOCKED了。
根据查看重置后的任务情况发现,quartz的表QRTZ_TRIGGERS、QUTZ_CRON_TRIGGERS等任务信息表都将任务删除了,唯独QRTZ_FIRED_TRIGGER表中仍然有记录。怀疑这个就是多次执行导致BLOCKED不改变的原因。
任务执行使用的是有状态记录的任务调度。
解决办法:
1、任务状态重置仍然执行
2、增加步骤清理QRTZ_FIRED_TRIGGER表中对应任务执行状态