2013-12-09 58 views
0

雖然我以前在Quartz方面有過一些經驗,但我在現有項目上首次從零開始設置它。我們決定使用Quartz(部分)爲未來的需求做準備。針對多個用戶啓動的任務的石英建議

我要尋找的建議/建議在以下方面:

要求

  • 將有幾種不同類型的用戶發起的任務,每一個從幾秒鐘抽出幾分鐘任何地方。這些需要與請求它們的用戶異步執行,並且即使用戶在臨時註銷時也要啓動。
  • 這些任務將被分組到各個類別中。
  • 在每個類別中,只有N(配置)任務應該同時執行
  • 每個用戶都必須能夠檢索任務列表他們,他/她發起
  • 管理員必須能夠檢索任務列表爲所有用戶
  • 任務必須在執行
  • 任務的中間撤銷必須撤銷,而排隊
  • 如果出現故障,那是正在執行需要恢復並重新啓動
  • 聚類任何任務必須被supprorted

選項

我看到執行下列選項,並會很感激一些反饋。

  1. 多爲自託管
    • 維護自己獨立的任務表,與預定的時間,用戶,狀態欄等
    • 每組有運行每x秒,檢查一個石英工作爲表中的下一個任務執行並行執行。
    • 我不知道如何在這種情況下實現n個並行執行,除了每個組的n個Quartz作業。
    • 我期望在這種情況下Quartz不需要在重啓時保留任何東西,儘管這意味着我的代碼必須處理這種情況。
    • 如果沒有任務安排,石英工作仍然會火
  2. 石英管
    • 每個任務的單獨石英工作。
    • 我不確定在這種情況下如何允許每組n個並行作業。看來Quartz註釋可以用來一次阻止多個並行的Job。
    • 石英錶需要在數據庫中保存。
    • 石英本身將負責重新啓動後恢復。
    • 如果沒有計劃任務,則不會觸發Quartz作業。
  3. 還有其他的東西嗎?

我不確定(提前)上述每個要求對應的要求如何。

我希望根據我上面寫的內容提供反饋意見。我找不到很多關於這方面的指導,因爲大多數似乎僅限於以特定間隔或時間運行的Quartz作業,並執行與用戶調度或用戶請求無關的特定任務。

謝謝。

回答

0

你確定你在談論

多爲自託管 - 這聽起來更像是你要寫出自己的調度

石英管 - 一旦加入到調度所有的作業都石英管理僅

要你只需寫了一些東西,你可以CA的任何變化可以停止特定作業等。

只有當執行的時間間隔比預定時間間隔多時,任何作業纔會並行運行。

一次只運行一個作業只是表示您正在使用@DisallowConcurrentExecution來禁用任何特定作業的併發執行。要具體計算每個組的作業實例數量,您需要編寫一些自定義邏輯。

提示:所有Quartz作業都通過JobExecutionContext,找出它是哪個作業組。然後添加..........爲自己思考。

您可以檢查如何擁有Quartz作業持久性。再次自己動手。我確信Quartz有足夠的信息和如何實現它。

請記住所有的API不僅僅是QuartZ提供了一組操作。但是實現以及如何使用它們來到開發人員身上。總是提供固定的大綱和如何指導可用。 Java是一種擁有大量文檔的語言。


您可以通過這個討論 Controlling instances of Job


BTW這將是自己的自定義實現獲取幫助。我還沒有嘗試過檢查任何可用的石英插件。


只是想到了另一種解決方案。如果你有任何UI界面或添加任務。和任何間隔(再次..........)

你可能做的是,將你的作業寫入堆棧 Quartz作業可以簡單地讀取堆棧並將其作爲單獨的線程加載。

創建一個具有固定線程數的線程池。在這個線程池中,我們可以產生線程。

這樣你就可以控制

線程

的數量,我認爲這是未來的多爲實施計劃

+0

Acewin嗨。感謝您的答覆。我想過你的問題,並且一直在做更多的閱讀。我現在可以更好地(希望)以這種方式重述我的問題:用戶啓動任務。我想使用Quartz來調度和限制正在運行的同時任務的數量。我最好是(a)每個任務有一個Quartz作業實例,並根據需要使用專門的Quartz作業來觸發它們,或者(b)有一個Quartz作業並根據數量創建n個觸發器未完成的工作。這是否澄清我的問題? – Ask613

+0

是的,現在清楚如何進行你應該能夠拿出一個解決方案。當使用API​​唯一的方式來解決這個問題時,這是實施解決方案 – Acewin