2012-03-24 30 views
1

在我的项目中,我创建了一个调用虚拟作业的立即SimpleTrigger(做的事情持续超过30秒)。我将失火策略设置为MISFIRE_INSTRUCTION_FIRE_NOW,并且作业请求恢复标志也设置为true。中断的石英触发器不会恢复

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

在我们的生产系统中,这会非常不利,因为任何软件更新都会不经意地最终中断正在运行的作业,并且根本不会再次启动(关键的一次性作业会导致未完成即将到来的工作中不合需要的涟漪)。从我们的角度来看,这是非常不可取的。

我想要的是,中断的作业也会在系统重新备份后触发(本质上同样的行为是触发器计划时间是系统停机时间,策略是MISFIRE_INSTRUCTION_FIRE_NOW)。有没有解决方法?

回答

2

要做到这一点,你必须配置的选项requestRecovey的工作,在Java和Quartz 2.X:

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...