調度簡單
Quartz是一個徹底由java編寫的開源做業調度框架。不要讓做業調度這個術語嚇着你。儘管Quartz框架整合了許多額外功能, 但就其簡易形式看,你會發現它易用得簡直讓人受不了!。簡單地建立一個實現
org.quartz.Job接口的java類。Job接口包含惟一的方法:
public void execute(JobExecutionContext context)
throws JobExecutionException;
在你的Job接口實現類裏面,添加一些邏輯到execute()方法。
一旦你配置好Job實現類並設定好調度時間表,Quartz將密切注意剩餘時間。當調度程序肯定該是通知你的做業的時候,Quartz框架將調用你Job實現類(做業類)上的execute()方法並容許作它該作的事情。無需報告任何東西給調度器或調用任何特定的東西。僅僅執行任務和結束任務便可。若是配置你的做業在隨後再次被調用,Quartz框架將在恰當的時間再次調用它。
內部架構
在規模方面,Quartz跟大多數開源框架相似。
大約有300個java類和接口,並被組織到12個包中。
這能夠和Apache Struts把大約325個類和接口以及組織到11個包中相比。儘管規模幾乎不會用來做爲衡量框架質量的一個特性,但這裏的關鍵是quartz內含不少功能,這些功能和特性集是否成爲、或者應該成爲評判一個開源或非開源框架質量的因素。
調度器
Quartz框架的
核心是調度器。調度器
負責管理Quartz應用運行時環境。調度器不是靠本身作全部的工做,而是依賴框架內一些很是重要的部件。Quartz不只僅是線程和線程管理。爲確保可伸縮性,Quartz採用了基於多線程的架構。啓動時,框架初始化一套worker線程,這套線程被調度器用來執行預約的做業。這就是Quartz怎樣能
併發運行多個做業的原理。Quartz依賴一套鬆耦合的
線程池管理部件來管理線程環境。本篇文章中,咱們會屢次提到線程池管理,但Quartz裏面的每一個對象是可配置的或者是可定製的。因此,例如,若是你想要插進本身線程池管理設施,我猜你必定能!
框架特徵
Quartz框架有一個豐富的特徵集。事實上,Quartz有太多特性以至不能在一種狀況中所有領會,下面列出了一些有意思的特徵,但沒時間在此詳細討論。
監聽器和插件
每一個人都喜歡監聽和插件。今天,幾乎下載任何開源框架,你一定會發現支持這兩個概念。
監聽是你建立的java類,當關鍵事件發生時會收到框架的回調。例如,當一個做業被調度、沒有調度或觸發器終止和再也不觸發時,這些均可以經過設置來通知你的監聽器。Quartz框架包含了
調度器監聽、做業和觸發器監聽。你能夠配置做業和觸發器監聽爲
全局監聽或者是特定於做業和觸發器的監聽。
一旦你的一個具體監聽被調用,你就能使用這個技術來作一些你想要在監聽類裏面作的事情。例如,你若是想要在每次做業完成時發送一個電子郵件,你能夠將這個邏輯寫進做業裏面,也能夠寫進JobListener裏面。寫進JobListener的方式強制使用
鬆耦合有利於設計上作到更好。
Quartz插件是一個新的功能特性,無須修改Quartz源碼即可被建立和添加進Quartz框架。他爲想要擴展Quartz框架又沒有時間提交改變給Quartz開發團隊和等待新版本的開發人員而設計。若是你熟悉Struts
插件的話,那麼徹底能夠理解Quartz插件的使用。
與其Quartz提供一個不能知足你須要的有限擴展點,還不如經過使用插件來擁有可修整的擴展點。
集羣Quartz應用
Quartz應用能被集羣,是水平集羣仍是垂直集羣取決於你本身的須要。集羣提供如下好處:
·伸縮性
·高可用性
·負載均衡
Quartz能夠藉助關係數據庫和JDBC做業存儲支持集羣。
Terracotta擴展quartz提供集羣功能而不須要數據庫支持
相關工具
Quartz常常會用到cron表達式,可使用國外網站cronmaker輔助生成cron表達式。