2017-10-20 102 views
0

基本上,我使用Quartz Scheduler的實現,我想同時運行多個作業,但有些應該先於其他運行。爲此,我找到了觸發器的參數「優先級」。石英計劃程序觸發器不尊重優先

因此,讓我們說我有4個工作,每個工作都有自己的觸發器。我這樣設置優先級: JOB1 - 優先級5 作業2 - 優先級3 作業3 - 優先11 作業4 - 優先級8

我希望他們能在這個順序運行:作業3,作業4,工作, 1,job2

在20次運行中,只有3次左右我得到了預期的結果。對於其他人來說,要運行的第一項任務是非常隨機的,其餘的都是正確排序的。一次運行會像:JOB1,作業3,作業4,作業2 OR 作業4,作業3,JOB1,JOB2

我不能正確的理解中的優先級石英是如何工作的?我無法找到究竟發生了什麼。

+0

你的線程池大小是多少?如果所有工作都有相同的計劃時間,並且石英沒有空閒線程來運行它們,那麼所有優先級都會啓動。 – Srinivas

+0

線程池大小爲1.我認爲,就像這個例子http://www.quartz-scheduler.org/documentation/quartz-2.x/examples/Example14.html那樣,我應該根據優先級獲得任務運行 – Mocktheduck

+0

我們必須看看兩件事情。 1)您的工作安排如何?你是否對所有工作都有相同的cron,並期望他們能夠同時開火,或者你是否使用類似intervalWithDelay的方法安排多次運行? 2)查看你的工作NextFireTime可能會給你更多的見解。優先事項只有在所有工作計劃同時開火的情況下才會出現。如果他們的火災時間不同,具有最早scheduledToFire時間的工作將被拿起 – Srinivas

回答

0

這裏的問題是Quartz不能確保當你用不同的優先級同時安排多個作業時,你會按照你想要的順序得到它們,除非你的工作線程已經忙。否則,如果工作線程不忙,它將選擇具有最高優先級的作業,您可以在納秒範圍內調度該作業。

對我來說,這個線程並不忙,所以當我安排所有的工作時,石英有時間拿起並處理我預定的第一份工作。當線程忙於處理job1時,剩下的作業有時間安排。

你們可以按照「批量採集......」的消息來追蹤自己的問題。

我的解決方案是對作業列表使用方法計劃。