Spring与Quartz的整合

Quartzspring

Quartz是一个彻底由Java编写的开源做业调度框架,为在Java应用程序中进行做业调度提供了简单却强大的机制。Quartz容许开发人员根据时间间隔来调度做业。它实现了做业和触发器的多对多的关系,还能把多个做业与不一样的触发器关联。简单地建立一个org.quarz.Job接口的Java类,Job接口包含惟一的方法execute()。在Job接口实现类里面,添加须要的逻辑到execute()方法中。配置好Job实现类并设定好调度时间表,Quartz就会自动在设定的时间调度做业执行execute()。并发

Spring与Quartz框架

Spring很好的封装了Quartz的细节,先介绍Spring建立JobDetail的方式,这里仅介绍经过透明的使用Quartz达到定时任务开发的目的。spa

经过配置Spring的任务调度抽象层简化了任务调度,在Quartz的基础上提供了更好的调度对象。Spring使用Quartz框架来完成任务调度,建立Quartz的做业Bean(JobDetail),利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通的Java对象(即Job类),建立Job类,无须继承父类,直接配置MethodInvokingJobDetailFactoryBean便可。但须要指定一下两个属性。code

   targetObject:指定包含任务执行体的Bean实例。对象

        targetMethod:指定将指定Bean实例的该方法包装成任务的执行体。blog

例子以下:继承

<bean id="Synch21MessageJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="synch21MessageDisposeTask"/>
        <property name="targetMethod" value="synch21Message"/>
        <property name="concurrent" value="false"/>
    </bean>    

concurrent属性是为了防止并发或者死锁现象,true则为同时发生,对于相同的JobDetail,当指定多个Trigger时, 极可能第一个job完成以前,第二个job就开始了。定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成以前开始。接口

下面介绍触发器,这里配置为简单的触发器。进程

<bean id="Synch21MessageTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="Synch21MessageJob"/>
        <property name="startDelay" value="10000"/>
        <property name="repeatInterval" value="3000"/>
    </bean>    

触发时长间隔和开始延时都在这里进行设置。

另外还有一种触发器CronTrigger,CronTrigger可以提供复杂的触发器表达式的支持。CronTrigger是基于Unix Cron守护进程,它是一个调度程序,支持简单而强大的触发器语法。

<bean id="receivedCaseCountJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="receivedCaseCountJob" />
     <!-- 指定Cron表达式:周一到周五7点、12点执行调度 -->     

      <property name="cronExpression"           value="0 0 7,12 ? * MON-FRI"/> 

    </bean>

 

下面还要配置调度器,须要将全部的触发器都配置在list里面

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="Synch21MessageTrigger"/>
          <ref bean="receivedCaseCountJobTrigger" />

            </list>
        </property>
    </bean>  
 

这样,只要实现synch21MessageDisposeTask对应的类中synch21Message方法就好了,系统会根据配置定时触发该方法。

最后须要注意的是

将spring核心jar包、quartz.jar和Spring-context-support.jar导入类路径

相关文章
相关标签/搜索