天天看點

Quartz.net官方開發指南 第十課: 配置、資源使用以及SchedulerFactory

   Quartz以子產品方式構架,是以,要使它運作,幾個元件必須很好的咬合在一起。幸運的是,已經有了一些現存的助手可以完成這些工作。

在Quartz進行工作之前需要被配置的元件主要有:

• ThreadPool 線程池

• JobStore

• DataSources (如果需要)

• Scheduler本身

<b>ThreadPool</b>(線程池)為Quartz運作任務時提供了一些線程。池中的線程越多,那麼并發運作的任務數就越多。但是,過多的線程會降低系統的運作速度。大多數使用者發現5個或者相近的線程就已經足夠了,因為任何給定的時間段内都不超過100個任務要運作,而且這些任務不會在同一時刻運作,同時任務活動時間很短(很快就結束了)。其他的使用者發現需要10,15,50,甚至100個線程,因為每個schedules都有成千上萬的觸發器,并且在給定的時刻會有平均10到100個任務在運作。确定schedule的線程池中的線程數量的合理值取決于用scheduler來做什麼。除了盡可能少地設定線程數量,使得任務執行時線程夠用外(由于計算機資源的有限性),沒有其他實用的準則。注意:如果觸發器觸發的時間到了,卻沒有可用的線程,那麼Quartz将會讓這個任務等待,直到有線程可用。這樣,任務的執行将比它因該執行的時間晚一些毫秒。如果scheduler的配置的“未觸發極限”時限中仍然沒有線程可用,這甚至會導緻“未觸發(misfire)”。

ThreadPool接口定義在org.quartz.spi中,你也可以建立一個自己的ThreadPool(線程池)實作,Quartz打包了一個簡單(但非常滿意的)的線程池,名為:org.quartz.simpl.SimpleThreadPool,這個線程池隻是簡單地在它的池中保持固定數量的線程,不增長也不縮小。但是它非常健壯且經過良好的測試,差不多每個Quartz使用者都使用這個池。

<b>JobStores</b>和<b>DataSrouces</b>在第九課中已經讨論過,值得注意的一個事實是所有的JobStores都實作了IJobStore接口,如果捆綁的JobStores不能滿足你的要求,你可以自己開發一個。

<b>JobStores</b>

最後你需要建立自己的<b>Scheduler</b>執行個體。<b>Scheduler</b>本身需要給定一個名字處理的JobStore和ThreadPool執行個體。

<b>StdSchedulerFactory</b>

StdSchedulerFactory是對org.quartz.SchedulerFactory接口的一個實作。是使用一套屬性(NameValueCollection)來建立和初始化Quartz Scheduler。這些屬性通常在檔案中存儲和加載。也可以通過編寫程式來直接操作工廠。簡單地調用工廠的getScheduler()就可以産生一個scheduler,初始化(以及它的ThreadPool、JobStore和DataSources),并且傳回一個公共的接口。

<b>DirectSchedulerFactory</b>

DirectSchedulerFactory是SchedulerFactory的另一個實作。它對于那些希望用更加程式化的方式建立Scheduler非常有用。不鼓勵使用它的原因如下:

(1) 它需要使用者非常了解他們想要幹什麼。

(2) 它不允許聲明式的配置。換句話說,它使用寫死的方式設定scheduler。

<b>Logging </b>日志

本文轉自 張善友 51CTO部落格,原文連結:http://blog.51cto.com/shanyou/73986,如需轉載請自行聯系原作者