Spring集成Quartz定時任務

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的TriggerListenerJobListener的支持,這相似AOP編程,能夠在任務執行先後進行檢查等工做,經過簡單的屬性配置可實現。

相關文章
相關標籤/搜索