Quartz特點
運行環境
- Quartz 可以運行嵌入在另一個獨立式應用程序
- Quartz 可以在應用程序服務器(或servlet容器)內被實例化,並且參與XA事務
- Quartz 可以作爲一個獨立的程序運行(其自己的Java虛擬機內),可以通過RMI使用
- Quartz 可以被實例化,作爲獨立的項目集羣(負載平衡和故障轉移功能),用於作業的執行
作業調度
作業被安排在一個給定的觸發時運行。觸發器可以使用以下指令的接近任何組合來創建:
- 在一天中的某個時間(到毫秒)
- 在一週的某幾天
- 在每月的某一天
- 在一年中的某些日期
- 不在註冊的日曆中列出的特定日期(如商業節假日除外)
- 重複特定次數
- 重複進行,直到一個特定的時間/日期
- 無限重複
- 重複的延遲時間間隔
作業是由其創建者賦予的名字,也可以組織成命名組。觸發器也可以給予名稱和放置在組中,以方便地將它們調度內組織。作業可以被添加到所述調度器一次,而是具有多個觸發器註冊。在企業Java環境中,作業可以執行自己的工作作爲分佈式(XA)事務的一部分。
作業執行
- 作業可以實現簡單的作業接口,爲作業執行工作的任何Java類。
- Job類的實例可以通過Quartz被實例化,或者通過應用程序框架。
- 當觸發時,調度通知實現JobListener和TriggerListener接口零個或多個Java對象(監聽器可以是簡單的Java對象,或EJB,JMS或發佈者等)。這些監聽器在作業已經執行之後通知。
- 由於作業完成後返回JobCompletionCode,它通知的成功或失敗的調度。JobCompletionCode還可以指示的基礎上,成功的話就採取行動調度/失敗的代碼 - 如立即重新執行作業。
作業持久性
- Quartz的設計包括可被實現以提供的作業存儲各種機制一個作業存儲接口
- 通過使用包含的JDBCJobStore,所有的作業和觸發器配置爲「非揮發性」都存儲在通過JDBC關係數據庫。
- 通過使用包含的RAMJobStore,所有的作業和觸發器存儲在RAM,因此不計劃執行仍然存在 - 但這是無需使用外部數據庫的優勢。
事務
- 可以參與JTA事務,通過使用JobStoreCMT(JDBCJobStore的子類)。
- Quartz可以管理JTA事務(開始並提交它們)周圍作業的執行,從而使作業執行的工作自動將JTA事務中發生。
集羣
- 故障切換
- 負載均衡
- Quartz的內置的羣集功能,通過JDBCJobStore(如上所述)依靠數據庫持久
- Terracotta擴展Quartz提供集羣功能,而不需要一個支持數據庫
監聽器和插件
- 應用程序可以捕捉事件的調度監控或通過實現一個或多個監聽器接口控制工作/觸發行爲。
- 插件機制,可以用來添加功能,Quartz讓作業執行過程中或工作負載和觸發定義的歷史不受限在一個文件中。
- 附帶了一些「工廠建有」插件和監聽器。