Quartz特點(diǎn):
?? Quartz能嵌入到任何獨(dú)立的應(yīng)用中運(yùn)行。
?? Quartz能在應(yīng)用服務(wù)器或者Servlet容器中實(shí)例化,并且能夠參與XA事務(wù)。
?? Quartz能夠以獨(dú)立的方式運(yùn)行(在它自己的Java虛擬機(jī)中),可以通過(guò)RMI使用Quartz。
?? Quartz可以被實(shí)例化為獨(dú)立程序的集群(有負(fù)載均衡和容錯(cuò)能力)。
Job Scheduling(任務(wù)日程安排)
任務(wù)在給定的觸發(fā)器(Trigger)觸發(fā)時(shí)執(zhí)行。觸發(fā)器可以通過(guò)幾乎以下所有形式的組合方式進(jìn)行創(chuàng)建:
?? 在一天中的任意時(shí)刻(可以精確到毫秒)。
?? 一周中特定的一些天。
?? 一個(gè)月中特定的一些天。
?? 一年中特定的一些天
?? 不在日歷列表中注冊(cè)的一些天(比如節(jié)假日)。
?? 循環(huán)特定的次數(shù)。
?? 循環(huán)到特定的時(shí)間。
?? 無(wú)限循環(huán)。
?? 按照一定的時(shí)間間隔循環(huán)。
Job Execution(任務(wù)執(zhí)行)
• 任務(wù)是任何實(shí)現(xiàn)簡(jiǎn)單Job接口的Java 類(lèi),這樣開(kāi)發(fā)者能夠執(zhí)行任何完成他們工作的任務(wù)。
• 任務(wù)類(lèi)的實(shí)例可以由Quartz實(shí)例化,也可以由你的程序框架實(shí)例化。
當(dāng)觸發(fā)器被觸發(fā)時(shí),日程管理器將會(huì)通知某個(gè)或者多個(gè)實(shí)現(xiàn)了JobListener 或TriggerListener的對(duì)象(監(jiān)聽(tīng)器可以是簡(jiǎn)單的Java對(duì)象,或者EJBs,或者JMS消息發(fā)布器,等等)。這些監(jiān)聽(tīng)器在任務(wù)執(zhí)行完畢后也會(huì)接到通知。
• 任務(wù)被完成后,他們會(huì)返回一個(gè)“任務(wù)完成碼(JobCompletionCode)”,這個(gè)“任務(wù)完成碼”告知日程管理器任務(wù)執(zhí)行的結(jié)果是成功還是失敗。日程管理器會(huì)根據(jù)成功或者失敗碼來(lái)采取措施,比如:立即重新執(zhí)行任務(wù)。
Job Persistence(任務(wù)持久化)
• Quartz設(shè)計(jì)中包括了一個(gè)JobStore接口,這樣,實(shí)現(xiàn)這個(gè)接口的Job類(lèi)可以以多種機(jī)制實(shí)現(xiàn)Job的存儲(chǔ)。
• 通過(guò)使用JDBCJobStore,所有的Jobs和Triggers被配置為“non-volatile”(不輕快)的方式。即,通過(guò)JDBC存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中。
• 通過(guò)使用RAMJobStore,所有Jobs和Triggers被存儲(chǔ)在RAM。因此,在程序執(zhí)行中沒(méi)有被持久化,但這種方式的優(yōu)點(diǎn)就是不需要外部數(shù)據(jù)庫(kù)。
Transactions(事務(wù))
• Quartz通過(guò)JobStoreCMT(JDBCJobStore的一個(gè)子類(lèi))可參與JTA事務(wù)。
• Quartz可以管理JTA事務(wù)(開(kāi)始或者提交事務(wù))。
Clustering(集群)
• Fail-over.(容錯(cuò))
• Load balancing.(負(fù)載均衡)
Listeners & Plug-Ins(監(jiān)聽(tīng)器及插件)
• 應(yīng)用可以通過(guò)實(shí)現(xiàn)一個(gè)或者多個(gè)監(jiān)聽(tīng)器接口來(lái)實(shí)現(xiàn)捕捉日程事件,以監(jiān)視或控制任務(wù)/觸發(fā)器的行為。
• 可以通過(guò)插件的機(jī)制來(lái)擴(kuò)展Quartz 的功能。例如:記錄任務(wù)執(zhí)行歷史的日志,或者從文件中載入任務(wù)和觸發(fā)器的定義。