天天看點

Quartz教程:快速入門

歡迎來到quartz快速入門教程。閱讀本教程,你将會了解:

quartz下載下傳

quartz安裝

根據你的需要,配置quartz

開始一個示例應用

quartz安裝包根目錄的lib/目錄下有很多的jar包。其中,quartz-xxx.jar(其中xxx是版本号)是最主要的。為了使用quartz,必須将該jar包放在應用的classpath下;

下載下傳後,解壓,然後将quartz-xxx.jar放到你的應用中。

我主要是在應用伺服器的環境中使用quartz,是以一般将quartz jar包放到應用中(.ear或.war)。當然,如果你希望在很多應用中使用quartz,将quartz的jar包放在應用伺服器(appserver)的classpath下即可。如果你隻是希望在獨立的應用中使用quartz,将quartz的jar包和你的應用依賴的其它jar包放在一起即可。

quzrtz依賴一些第三方的庫(以jar包的形式),這些庫位于quartz安裝包的<code>lib</code>目錄下。要使用quartz的所有功能,必須将所有的第三方jar包都放到classpath下。如果你開發的是一個獨立的quartz應用,建議将所有的jar包都放到classpath下;如果是在應用伺服器環境下使用quartz,其中有些包可能已經存在于classpath中了,是以你需要自己選擇。

在應用伺服器環境下,如果同一個jar檔案,存在兩個不同的版本,要注意,可能會産生一些奇怪的結果;比如,weblogic包含了一個j2ee的實作(在weblogic.jar中),該實作與servlet.jar的實作可能不一緻。此時,應該從你的應用中排除掉servlet.jar,這樣你就知道使用的是哪個類了。

quartz使用名為quartz.properties的配置檔案。剛開始時該配置檔案不是必須的,但是為了使用最基本的配置,該檔案必須位于classpath下。

基于我的個人情況舉個例子,我的應用是基于weblogic workshop開發的。我将所有的配置檔案(包括quartz.properties)放到應用根目錄下的一個項目中。當我将項目打包成.ear檔案時,放置配置檔案的項目會以jar包的形式進入最終的.ear包,是以quartz.properties檔案就自動位于classpath中了。

如果你準備建構一個使用quartz的web應用(以.war包的形式),你應該将quartz.properties檔案放到web-inf/classes目錄下。

這裡包含很多内容。quartz是一個配置很靈活的應用。配置quartz最好的方式是,編輯quartz.properties檔案,然後放到應用的classpath下。

quartz的安裝包中包含了一些配置檔案的示例,位于example/目錄下。我建議你建立自己的quartz.properties檔案,而不是簡單地從示例中拷貝并删除不需要的部分。這樣看起來更整潔,而且你也會了解到quartz的更多功能。

為了使用quartz,一個基本的quartz.properties配置檔案如下所示:

上述配置的scheduler有如下特點:

org.quartz.scheduler.instancename scheduler的名稱為“myscheduler”

org.quartz.threadpool.threadcount 線程池中有3個線程,即最多可以同時執行3個job;

org.quartz.jobstore.class quartz的所有資料,包括job和trigger的配置,都會存儲在記憶體中(而不是資料庫裡)。如果你想使用quartz的資料庫存儲功能(校對注:設定成另外一個類),我們建議在使用資料庫存儲之前,先使用記憶體存儲(ramjobstore)。

下載下傳和安裝完quartz後,是時候開發一個示例應用,并讓它跑起來了。下面的示例代碼,擷取scheduler執行個體對象,啟動,然後關閉。

quartztest.java

當你調用stdschedulerfactory.getdefaultscheduler()擷取scheduler執行個體對象後,在調用scheduler.shutdown()之前,scheduler不會終止,因為還有活躍的線程在執行。

注意示例代碼中的靜态導入(static import),下面的代碼中也會用到它們。

如果你沒有配置日志輸出,所有的日志會輸出到控制台,比如:

你可以在start()和shutdown()之間做一些有趣的事情:

在調用shutdown()之前,你需要給job的觸發和執行預留一些時間,比如,你可以調用thread.sleep(60000)讓線程睡眠一段時間。

好了,自己去探索吧!