Spring最大的能耐之一就是提供對流行框架的無縫集成,Quartz做爲Java實現的工業標準級別的定時任務調度器,Spring對其提供了無縫的集成,並大大簡化了開發工做,這是使用Spring比較爽的地方之一。
java
一個任務調度器最基本的三個元素是spring
Job(or Task):須要定時處理的事情編程
Trigger: 事件觸發時間點(一次性的、固定週期性的、像Linux Cron Jobs 靈活配置的)併發
Scheduler: 調度器框架
Job與Trigger是一對一的關係,Scheduler與Trigger是一對多的關係。ide
先看一個Spring配置這三個元素的示例:
spa
<bean id="fixedRateTask" class="com.stevex.demo.FixedRateTask"></bean> <bean id="fixedTimeTask" class="com.stevex.demo.FixedTimeTask"></bean> <bean id="job1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="fixedRateTask"> </property> <property name="targetMethod" value="doSth"></property> </bean> <bean id="job2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="fixedTimeTask"> </property> <property name="targetMethod" value="doSth"></property> </bean> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="job1" /> <property name="startDelay" value="0" /> <property name="repeatInterval" value="60000" /> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="job2" /> <property name="cronExpression" value="0 2 15 * * ?" /> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleTrigger" /> <ref bean="cronTrigger" /> </list> </property> </bean>
Quartz的Job對應類爲JobDetail,Spring爲簡化開發提供了工廠包裝類MethodInvokingJobDetailFactoryBean類,固然開發人員仍是能夠本身實現JobDetail的,能夠簡單經過繼承QuartzJobBean實現。MethodInvokingJobDetailFactoryBean類有concurrent屬性默認值爲true,即做業可併發調度,能夠將其設置爲false若是不容許做業被併發調度。xml
Quartz提供兩種Trigger,一是SimpleTrigger提供週期性定時觸發器,Spring的對工廠類爲SimpleTriggerFactoryBean(注:SimpleTriggerBean不支持Quartz2以上版本,已經被SimpleTriggerFactoryBean替代);一是CronTrigger提供像Linux Cron Jobs那樣的複雜觸發器,觸發時間點使用Cron表達式定義,Cron表達式語法能夠參考Quartz官方文檔,Spring的對應工廠類爲CronTriggerFactoryBean(注:CronTriggerBean不支持Quartz2以上版本,已經被CronTriggerFactoryBean替代)。繼承
Quartz的Scheduler對應類爲Scheduler,Spring對應工廠類爲SchedulerFactoryBean。事件
附:完整路徑類名列表
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean org.springframework.scheduling.quartz.QuartzJobBean org.springframework.scheduling.quartz.SimpleTriggerFactoryBean org.springframework.scheduling.quartz.SimpleTriggerBean org.springframework.scheduling.quartz.CronTriggerFactoryBean org.springframework.scheduling.quartz.CronTriggerBean org.springframework.scheduling.quartz.SchedulerFactoryBean
配置完做業調度的基本三要素後咱們只須要開發Task類,如示例中的FixedRateTask類,而與Quartz集成的事情Spring所有搞定了,立刻下載並運行示例代碼試試吧!
Spring同時提供對Quartz的TriggerListener和JobListener的支持,這相似AOP編程,能夠在任務執行先後進行檢查等工做,經過簡單的屬性配置可實現。