Quartz基礎結構
Quartz對任務調度的領域問題進行了高度抽象,提出了調度器(Scheduler)、任務(Job)和觸發器(Trigger)這3個核心概念,並在Trigger觸發機制的基礎上使用org.quartz.Calendar進行定點(如假期)排除。


定義任務調度需要以下幾個步驟:
- 定義JobDetail實例對象,該對象需要指定名稱、組和Job接口的Class信息。
- 定義Trigger實例對象,通過該對象設置觸發任務的相關信息,如起始時間、重復次數等。
- 定義Schedule實例對象,通過ScheduleFactory工廠接口的實現類實例該對象。
- 向Schedule中注冊JobDetail和Trigger,有兩種方式:
- 通過Schedule的schedule方法注冊,此時它自動讓Trigger和JobDetail綁定。
- 通過addJob和scheduleJob方法注冊,此時需要手動設置 Trigger的關聯的Job組名和Job名稱,讓Trigger和JobDetail綁定。
- 啟動調度器(調用Schedule對象的start方法)。
Cron表達式
Quartz使用Cron表達式定義時間規則,其中Cron表達式由6或7個空格分隔的時間字段組成。

- * 表示所有值。
- ? 表示未說明的值,即不關心它為何值。? 號只能用在日和周域上,為這兩域的其中一個指定了值,那就必須在另一個字值上放一個 ?。
- - 表示一個指定的范圍;
- , 表示附加一個可能值。
- / 符號前表示開始時間,符號后表示每次遞增的值。
- L 表示這個月最后一天。
- W 用來描敘最接近指定天的工作日(周一到周五)。
- # 用來指定這個月的第幾個周幾。
- C 指和calendar聯系后計算過的值。
在Spring中使用Quartz
在Spring中主要是通過配置bean的方式定義
Schedule、
Trigger和
JobDetail三個主要實體。通過
JobDetailBean和
MethodInvokingJobDetailFactoryBean配置
JobDetail信息;通過
SimpleTriggerBean和
CronTriggerBean配置
Trigger信息;通過
ScheduleFactoryBean配置Schedule信息。它們具體怎么配置參考源代碼的
setter方法。
Spring對JDK Timer的支持
Spring提供了幾個JDK Timer的支持類,主要在以下方面對JDK Timer提供支持:
- ScheduledTimerTask,它對TimerTask提供封裝並提供相關的配置。
- 通過MethodInvokingTimerTaskFactoryBean類可以將一個Bean的方法封裝為TimerTask。
- 通過TimerFactoryBean可以方便地配置Timer,此外讓Timer的生命周期和Spring容器的生命周期相關,在初始化TimerFactoryBean后,啟動Timer,在Spring容器關閉前取消Timer