2012-03-24 63 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...