中断的Quartz Trigger不会恢复

时间:2012-03-24 09:09:31

标签: quartz-scheduler

在我的项目中,我正在创建一个立即调用虚拟作业的SimpleTrigger(执行持续时间超过30秒的事情)。我将失火策略设置为MISFIRE_INSTRUCTION_FIRE_NOW,并且作业请求恢复标志也设置为true。

作业开始后(状态从READY转换到Quartz DB存储中的RUNNING),我故意弹跳(重启)整个系统,这会中断正在运行的作业。当系统恢复活动状态时,我看到的是中断的作业根本不会重新启动。

在我们的生产系统中,这会造成严重损害,因为任何软件更新都会无意中最终中断该实例的正在运行的作业,并且根本不会再次触发(一个关键的一次性工作将完成未完成导致不合需要的在即将到来的工作中涟漪)。从我们的角度来看,这是非常不受欢迎的。

我想要的是在系统再次备份后中断的作业也会触发(基本上相同的行为是触发计划时间是在系统停机期间且策略是MISFIRE_INSTRUCTION_FIRE_NOW)。这里有解决方法吗?

1 个答案:

答案 0 :(得分:2)

为此,您必须在Java和Quartz 2.X中使用选项requestRecovey配置作业:

JobDetail jd = newJob(job).withIdentity(name, group) //
            .requestRecovery()// ask scheduler to re-execute this job
            .build(); // if it was in progress when the scheduler went down...