深入理解Quartz常用類和任務熄火策略

Quartz是開源組織OpenSymphony的一個作業調度框架,採用多線程架構,可伸縮性強,可集羣擴展

Quartz提供的常用類:Scheduler, SchedulerFactory, Job, JobDetail, JobBuilder, Trigger, TriggerBuilder, ScheduleBuilder

UML類圖如下:

image.png

Scheduler時Quartz調度程序的主要接口,維護一個JobDetails和Triggers的註冊表,到觸發時間時,調度程序將執行Job。


調度程序Scheduler實例通過SchedulerFactory工廠創建,有兩個實現類DirectSchedulerFactory和StdSchedulerFactory,前者不寫入持久化數據庫,後者加載quartz.properties屬性配置文件,將查找加載當前目錄和org.quartz包。


任務是實現Job接口的一個類,實現方法execute(),可聲明屬性:

- @DisallowConcurrentExecution,同時只執行一個實例。

- @PersisJobDataAfterExecution,正常執行後將JobDataMap備份。

JobDetail將任務屬性傳遞給Scheduler,通過JobBuilder創建,JobDataMap保存任務實例的狀態信息。


觸發器Trigger通過TriggerBuilder創建,結合ScheduleBuilder設置時間規則,可通過JobDataMap傳遞數據給Job。常用的兩種觸發器:

- SimpleTrigger:指定開始時間、結束時間、重複次數、執行間隔。

- CronTrigger:使用Cron表達式設置時間規則。


構建ScheduleBuilder設置時間規則時,可配置Misfire選項,指定執行失敗熄火時的處理規則:


含義

支持ScheduleBuilder

IgnoreMisfires

馬上執行,比如整點9點失敗,系統10:15啓動,會馬上執行9點10點的任務。

SimpleSchedule

CronScheduleBuilder

CalendarIntervalScheduleBuilder

DailyTimeIntervalScheduleBuilder

FireNow

立即再次觸發

SimpleSchedule

NowWithExistingCount

立即再次觸發,不計入總次數。

SimpleSchedule

NowWithRemainingCount

立即再次觸發,計入總次數。

SimpleSchedule

NextWithExistingCount

等待下次執行,不計入總次數。

SimpleSchedule

NextWithRemainingCount

等待下次執行,計入總次數。

SimpleSchedule

DoNothing

不做任何處理,執行下一次週期。

CronScheduleBuilder

CalendarIntervalScheduleBuilder

DailyTimeIntervalScheduleBuilder

FireAndProceed

合併下一個週期,正常執行。比如整點9點10點失敗,系統10:15啓動,在11點合併執行一次。

CronScheduleBuilder

CalendarIntervalScheduleBuilder

DailyTimeIntervalScheduleBuilder


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章