簡體   English   中英

如何做“順序”作業調度(Quartz?)

[英]How to do “sequential” Job Scheduling (Quartz?)

我正在使用Quartz Scheduling,有2個工作。 第一個作業執行約2分鍾的任務,第二個作業是為臨時文件的清潔操作設置。 因此,我需要設置計划,以便在第一個作業執行/完成執行任務后,我需要在第二個作業的幫助下執行清理操作。
考慮示例9 - Quartz 2.1.x下的Job Listeners,它聲明我們可以定義一個名為jobWasExecuted(_,_)的方法; 在Job Listener中,它在第一個作業執行/或進入運行狀態時執行。
我們是否能夠設置可以監聽第一個作業然后執行第二個作業的計划? 要么,
我們是否能夠像在Java多線程中那樣定義join()方法,它可以在完成第一個作業時執行?

目前沒有“直接”或“免費”的方式來鏈接觸發器與Quartz。 但是,有幾種方法可以毫不費力地完成它。 以下是幾種方法的概述:

一種方法是使用一個偵聽器(即TriggerListener,JobListener或SchedulerListener),它可以注意到作業/觸發器的完成,然后立即安排一個新觸發器來觸發。 這種方法可能會涉及到一些問題,因為您必須告知監聽器哪個作業遵循哪個 - 您可能需要擔心此信息的持久性。

另一種方法是構建一個Job,它在JobDataMap中包含要觸發的下一個作業的名稱,並且當作業完成時(其Execute()方法的最后一步)將作業調度到下一個作業。 有幾個人這樣做,並且運氣好。 大多數人都創建了一個基類(抽象)類,它是一個知道如何使用特殊鍵(常量)從JobDataMap中獲取作業名稱和組的Job,並包含用於調度已識別作業的代碼。 然后他們只是對這個類進行擴展,其中包括作業應該做的額外工作。

參考: http//www.quartz-scheduler.net/documentation/faq.html#how-do-i-chain-job-execution ? - or,-how-do-i-create-a- workflow

我知道這是一個老問題,但是還有2個選項可用於鏈接你的工作執行,人們可以發現它們很有用:

1)使用自早期版本以來標准Quartz發行版中包含的JobChainingJobListener 此偵聽器允許您使用其addJobChainLink方法以編程方式定義簡單作業鏈。

2)使用QuartzDesk等商業解決方案,我是其主要開發人員。 QuartzDesk包含一個強大的作業鏈引擎,允許您從應用程序代碼外部化作業鏈的定義,並使您能夠在運行時通過GUI更新作業鏈,而無需修改,重新部署和重新啟動應用程序。 作業鏈可以與特定作業,觸發器相關聯,也可以是任何作業執行時執行的全局作業鏈(對全局作業執行失敗處理程序等有用)。

QuartzDesk GUI:編輯工作鏈目標

來自http://www.quartz-scheduler.net/documentation/faq.html#how-do-i-chain-job-execution?-or,-how-do-i-create-a-workflow

如何讓作業同時發射?

Quartz.NET 2.x

實現IJob並使用[DisallowConcurrentExecution]屬性裝飾您的作業類。 有關詳細信息,請閱讀DisallowConcurrentExecutionAttribute的API文檔。

注釋在Java實現中可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM