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编程,能够在任务执行先后进行检查等工做,经过简单的属性配置可实现。

相关文章
相关标签/搜索