Quartz2.2.x官方文檔2.2.X—第三章 10.配置,資源使用和SchedulerFactory

Quartz 教程


Table of Contents | ‹ Lesson 9 | Lesson 11 ›

Lesson 10: 配置, 資源使用和SchedulerFactory

Quartz架構是模塊化的,因此要運行需要幾個組件組合起來。幸運的是,有一些幫手存在。

在Quartz能夠工作之前有些重要的組件需要配置:

  • ThreadPool
  • JobStore
  • DataSources (如果必要的話)
  • The Scheduler itself

ThreadPool 提供一組當執行任務時Quartz使用的線程。池中線程越多,就能夠同時執行越多的任務。然後,太多的線程會導致你的系統崩潰。大多數Quartz用戶發現5個左右線程是足夠的 -因爲他們在任何時候都會有小於100任務,這些任務通常不會同時運行,而且這些任務通常是短暫的(完成快速的). 有些用戶發現他們需要10,15,50,設置100個線程 - 因爲他們有成千上萬的各種各樣的觸發器 - 在任何時間都有平均10-100個任務要執行。你的調度程序池使用正確的數量完全取決於你的調度任務是怎麼樣。沒有真正的規則, 除了保持線程數儘可能小之外(爲了你機器資源考慮) - 但是確保你有足夠的時間讓你的任務觸發。主要如果一個觸發器的觸發時間到了,但是沒有一個可獲得的線程,Quartz將會阻塞(暫停)知道線程可獲取,接着任務將會執行 -比它應有段時間後幾毫秒。這可能導致線程錯誤 - 如果在調度程序配置的"錯誤閥值"時間內沒有可用線程。

線程池接在org.quartz.spi包內定義,你可以以任何你喜歡的方式是實現線程池。Quartz附帶一個簡單(但是非常有用)線程池名爲org.quartz.simpl.SimpleThreadPool. 這個線程池只是會維護一組固定的線程池 - 永遠不會減少,永遠不會增加。但是它非常強東並且經受的主考驗 - 幾乎每個使用Quartz的人都使用這個池。

JobStoresDataSources 在教程課程9進行了討論。這是值得注意,所有JobStores都需要是實現 org.quartz.spi.JobStore 接口 - and 如果一個捆綁的JobStores不是你需要的, 然後你可以自己做。

最後, 你需要創建一個 Scheduler 實例. 調度程序本身需要一個名字, 告訴它RMI設置,並且提供一個JobStore和ThreadPol。RMI設置包括是否應該將調度程序創建自身爲RMI服務對象 (使其可用於獲取遠程連接),  要使用的host和端口, 例如.. StdSchedulerFactory (在下面討論) 也可以創產生調度程序實例的實際代理通過遠程去創建調度程序。

StdSchedulerFactory

StdSchedulerFactory是一個org.quartz.SchedulerFactory接口的是吸納。它使用一系列屬性 (java.util.Properties)去創建和初始化一個Quartz調度程序。這些屬性通常存儲在文件中並從文件中加載,但是也可以由你的應用直接創建。簡單的在工廠調用getScheduler()方法生成調度程序,並初始化(包括它的線程池,JobStore和數據庫資源), 返回一個公共接口的引用。

在Qaurtz發行版目錄"docs/config"中有一些樣例配置(包含對屬性的描述)。你可以在Quartz文檔的參考部分找到完整文檔。

DirectSchedulerFactory

DirectSchedulerFactory是另一個SchedulerFactory的實現。對於希望以更程序化的方式創建調度程序的實例的這很有幫助。由於以下原因通常不要使用它:(1) 它要求用戶對它所做的事情有深入的瞭解 (2) 它不允許聲明式配置 - 或者換句話說, 你最終會硬編碼所有調度程序設置。

Logging

Quartz使用SLF4J框架滿足它的日誌需要。爲了調整日誌設置 (比如產出數量, 輸出的位置), 你不需要理解 SLF4J 框架, 這超出了本文的範疇。

如果你想要獲得關於觸發器和任務執行的額外信息,你可以啓用org.quartz.plugins.history.LoggingJobHistoryPluginorg.quartz.plugins.history.LoggingTriggerHistoryPlugin.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章