Quartz 介紹
Quartz是一個任務日程管理系統.
概述
Quartz是OpenSymphony開源組織在Job scheduling領域又一開源項目,它可以與J2EE與J2SE應用程序相結合使用也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的日程序表。Jobs可以做成標準的JAVA組件或Ejbs.
從軟件的角度來看,Quartz用一個小Java庫發布文件(.jar文件),這個庫文件包含了所有Quartz核心功能。這些功能的主要接口(API)是Scheduler接口。它提供了簡單的操作,例如:將任務納入日程或者從日程中取消,開始/停止/暫停日程進度。
如果你想將軟件組件的執行納入到日程中,它們只需簡單地實現Job接口,這個接口有一個execute()方法。如果希望在日程安排的時間到達時通知組件,那么這些組件應實現TriggerListener或者JobListener接口。
Quartz主過程可以在應用中啟動或者運行,也可以作為一個獨立的應用(帶有RMI接口),或者在一個J2EE應用服務器中運行,并且可作為其實J2EE組件的一種引用資源。
特點
- Quartz能嵌入到任何獨立的應用中運行。
- Quartz能在應用服務器或者Servlet容器中實例化,并且能夠參與XA事務。
- Quartz能夠以獨立的方式運行(在它自己的Java虛擬機中),可以通過RMI使用Quartz。
- Quartz可以被實例化為獨立程序的集群(有負載均衡和容錯能力)。
Job Scheduling(任務日程安排)
任務在給定的觸發器(Trigger)觸發時執行。觸發器可以通過幾乎以下所有形式的組合方式進行創建:
- 在一天中的任意時刻(可以精確到毫秒)。
- 一周中特定的一些天。
- 一個月中特定的一些天。
- 一年中特定的一些天
- 不在日歷列表中注冊的一些天(比如節假日)。
- 循環特定的次數。
- 循環到特定的時間。
- 無限循環。
- 按照一定的時間間隔循環。
Job Execution(任務執行)
- 任務是任何實現簡單Job接口的Java 類,這樣開發者能夠執行任何完成他們工作的任務。
- 任務類的實例可以由Quartz實例化,也可以由你的程序框架實例化。
- 當觸發器被觸發時,日程管理器將會通知某個或者多個實現了JobListener 或TriggerListener的對象(監聽器可以是簡單的Java對象,或者EJBs,或者JMS消息發布器,等等)。這些監聽器在任務執行完畢后也會接到通知。
- 任務被完成后,他們會返回一個“任務完成碼(JobCompletionCode)”,這個“任務完成碼”告知日程管理器任務執行的結果是成功還是失敗。日程管理器會根據成功或者失敗碼來采取措施,比如:立即重新執行任務。
Job Persistence(任務持久化)
- Quartz設計中包括了一個JobStore接口,這樣,實現這個接口的Job類可以以多種機制實現Job的存儲。
- 通過使用JDBCJobStore,所有的Jobs和Triggers被配置為“non-volatile”(不輕快)的方式。即,通過JDBC存儲在關系數據庫中。
- 通過使用RAMJobStore,所有Jobs和Triggers被存儲在RAM。因此,在程序執行中沒有被持久化,但這種方式的優點就是不需要外部數據庫。
Transactions(事務)
- Quartz通過JobStoreCMT(JDBCJobStore的一個子類)可參與JTA事務。
- Quartz可以管理JTA事務(開始或者提交事務)。
Clustering(集群)
- Fail-over.(容錯)
- Load balancing.(負載均衡)
Listeners & Plug-Ins(監聽器及插件)
- 應用可以通過實現一個或者多個監聽器接口來實現捕捉日程事件,以監視或控制任務/觸發器的行為。
- 可以通過插件的機制來擴展Quartz的功能。例如:記錄任務執行歷史的日志,或者從文件中載入任務和觸發器的定義。
本文由用戶 y2de 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!