關于Quartz,我不想說太多,原因在于:Quartz官方提供的15個例子太經典啦!!!還在網上找神馬亂七八糟的例子啊,這15個例子看看自己跑跑試試,學起來又快又輕松!!!本文附件附送這些例子啊!!!Timer時序調度框架解析
為了再降低一下看代碼的門檻,這里提供一些關鍵的概念性的描述,有所了解或者不想看文字的朋友請略過。或者看代碼有不懂的地方在來查看也可。
為了再降低一下看代碼的門檻,這里提供一些關鍵的概念性的描述,有所了解或者不想看文字的朋友請略過。或者看代碼有不懂的地方在來查看也可。
- Job:接口,只有一個方法void execute(JobExecutionContext context),開發者實現該接口定義Job所運行的任務,JobExecutionContext類提供了調度上下文的各種信息。Job運行時的信息 保存在JobDataMap實例中。
- JobDetail:Quartz在每次執行Job時,都重新創建一個Job實例,所以它不直接接 受一個Job的實例,相反它接收一個Job實現類,以便運行時通過newInstance()的反射機制實例化Job。因此需要通過一個類來描述Job的 實現類及其它相關的靜態信息,如Job名字、描述、關聯監聽器等信息,JobDetail承擔了這一角色。通過該類的構造函數可以更具體地了解它的功 用:JobDetail(java.lang.String name, java.lang.String group, java.lang.Class jobClass),該構造函數要求指定Job的實現類,以及任務在Scheduler中的組名和Job名稱
- Trigger:是一個類,描述觸發Job執行的時間觸發規則。主要有SimpleTrigger和CronTrigger這兩個子類。當僅需觸發一次或者以固定時間間隔周期執行,SimpleTrigger是最適合的選擇;而CronTrigger則可以通過Cron表達式定義出各種復雜時間規則的調度方案:如每早晨9:00執行,周一、周三、周五下午5:00執行等
- Calendar:org.quartz.Calendar和java.util.Calendar不同,它是一些日歷特定時間點的集合。一個Trigger可以和多個Calendar關聯,以便排除或包含某些時間點
- Scheduler:Trigger和JobDetail可以注冊到Scheduler中,兩者在 Scheduler中擁有各自的組及名稱,組及名稱是Scheduler查找定位容器中某一對象的依據。Scheduler可以將Trigger綁定到某 一JobDetail中,這樣當Trigger觸發時,對應的Job就被執行。一個Job可以對應多個Trigger,但一個Trigger只能對應一個 Job。可以通過SchedulerFactory創建一個Scheduler實例。Scheduler擁有一個SchedulerContext,它類 似于ServletContext,保存著Scheduler上下文信息,Job和Trigger都可以訪問SchedulerContext內的信息。
- ThreadPool:Scheduler使用一個線程池作為任務運行的基礎設施,任務通過共享線程池中的線程提高運行效率。