我有一個應用程序使用Quartz Scheduler來安排作業。該應用程序當前正在運行Quartz版本1.6.2。我的JobStore是org.quartz.impl.jdbcjobstore.JobStoreTX以及支持它的Oracle數據庫。集羣已打開,但只有一個使用數據庫的調度程序。我石英線程池的配置如下:我可以讓等待Quartz Jobs按照它們被觸發的順序觸發嗎?
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
我的工作是長時間運行,所以它是相當常見的有5個作業運行(由我THEAD池所允許的最大值)時,觸發器觸發新的就業機會。新觸發工作失火,我看到日誌消息如下所示:
2011-05-20 04:09:30,097 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:29 05/20/2011
2011-05-20 04:09:30,120 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:09:30,125 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:30 05/20/2011
2011-05-20 04:09:30,138 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:11:29,998 INFO [QuartzScheduler_scheduler-servername-111305822376676_MisfireHandler] o.q.impl.jdbcjobstore.JobStoreTX - Handling 2 trigger(s) that missed their scheduled fire-time.
一旦運行作業完成,在該失火的工作之一將得到回升和正常運行。但是,Quartz似乎隨機挑選了一個失誤的工作,而不考慮工作原定執行的順序。理想情況下,我希望他們根據他們原來的火災時間按照他們原本應該運行的順序進行拾取。
一旦Quartz ThreadPool中的空間變得可用,是否有可能使我的等待(失火)作業按照它們被觸發的順序被觸發?
我無法真正地測試這個,因爲我找到了一份新工作,多年沒有使用過石英,並且無法設置測試項目來檢查它是否有效。不過,我留下了深刻的印象,你已經很難回答一個5年的問題,你的答案似乎有幫助,所以我會繼續前進,並將其標記爲已解決:) – 2016-04-22 15:39:30
我遇到了類似的問題,所以搜索堆棧溢出。最後,我通過代碼挖掘出自己的想法,但認爲我會在這裏留下來,以防其他人在未來尋找答案。 – samblake 2016-04-24 10:41:47
@JonQuarfoth到底什麼對你有用?我安排了成千上萬的工作,工作將會長時間運行,因爲我需要將blob從位置遷移到另一個位置,而這些blob可以大到100GB。我正計劃使用Quartz集羣,以便在主人安排工作時,奴隸將繼續在這些工作上工作,而且我並不在意丟失火,因爲我只關心最終由其中一個奴隸挑選的工作。也許我可以設置一個荒謬的大失火閾值。請讓我知道你們對此有何看法。謝謝。 – Coder 2017-11-21 03:45:34