Quartz是什麼。
Quartz是一個全功能的,開源的作業發送器,Quartz可以整合到任何的J2EE或者J2SE程式中(從最小的單機程式到複雜的電子商務系統)。Quartz可以管理即使,幾百,甚至成千上萬的簡單或者複雜的作業調度。這些作業可以是任何標準的Java組件或者是EJB。Quartz作業調度系統包含了很多的企業級的特性,例如:JTA 事務,叢集等。
Quartz特性
第一, 運行環境
Quartz可以嵌入到其他的自己啟動並執行程式中
Quartz可以在應用伺服器(或者web伺服器)內部初始化,可以參與XA事務(分散式交易,兩階段交易認可)。
Quartz可以作為單獨的Java程式運行(在單獨的JAVA 虛擬機器進程中運行),可以通過RMI遠程使用
Quartz可以以分布式的方式運行(這樣可以利用負載平衡和自動容錯的功能)
第二,作業調度
當觸發器發生的時候,作業會被調度執行。觸發器使用幾乎所有的下列指令的聯合。
一天中的某個時間(微秒層級)
一周中的某些天
一月中的某些天
一年中的某些天
不在註冊的日曆中的某些天
重複若干次
重複執行指導某個時間
不確定的重複
在一定的時間之後重複
作業可以被建立者命名,也可以被組織到命名的組中。觸發器也可以被命名或者分組,這樣可以在發送器中方便的管理這些觸發器。一個作業可以被註冊到發送器中一次,但是使用多個觸發器。在J2EE環境中作業的內容可以參與到一個分散式交易中(XA Transaction)。
第三,作業執行
作業可以是實現Job介面的任意的java類,作業中可以實現你想實現的任何內容。
作業可以非Quartz執行個體化,也可以被你的程式執行個體化。
當一個觸發器發生的時候,發送器會觸發JobListener或者TriggerListener的執行個體,這些執行個體可以是簡單的Java對象,EJB,JMS 發行者,等。Job執行結束之後也會觸發這些Listener。
當作業執行完畢之後會返回一個JobCompletionCode對象,這個對象包含了執行成功或者失敗的資訊。JobCompletionCode也可以指示Scheduler執行那些根據這個作業結果需要動態執行的那些作業。
第四,作業持久化
Quartz設計中包含了一個JobStore的介面,你可以實現JobStore介面來使用不同的方式儲存作業(Job)。
使用JDBCJobStroe可以通過JDBC將穩定的作業和觸發器儲存在資料庫中。
使用RAMJobStore可以將作業和觸發器放在記憶體中這樣在每次執行結束的時候都會丟失這些內容,但是不需要使用外部的資料庫。
第五, 事務
通過是使用JobStoreCMT(JDBCJobStore的子類)可以參與到JTA事務中。(將是否註冊作業參與到其他的JTA事務中)
Quartz可以在作業開始或者結束的時候管理JTA事務(啟動或者提交事務),這樣Job可以在事務的上下文中執行。
第六, 叢集
容錯
叢集