• Spring与Quartz的整合


    Quartz

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

    Spring与Quartz

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

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

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

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

    例子如下:

    <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导入类路径

  • 相关阅读:
    实现粘贴WORD图片的在线编辑器
    js实现大文件分片上传的工具
    Nginx实现大文件分片上传的方法
    百度WebUploader实现大文件分片上传的方法
    ckeditor粘贴上传图片
    umediter实现粘贴word图片
    java.net.Socket
    matlab创建对角型矩阵
    QtList
    matlab矩阵行最简形
  • 原文地址:https://www.cnblogs.com/cn-leodream/p/6611130.html
Copyright © 2020-2023  润新知