Spring 4.2集成 Quartz Scheduler 2.2.2 任务调度简单实现示例

该博客详细介绍了如何在Spring 4.2中集成Quartz 2.2.2进行任务调度。通过一系列步骤,包括新建Maven项目,引入依赖,配置作业,设置触发器,创建SchedulerFactoryBean,定义业务处理类和任务Bean,最终实现定时任务的执行。示例中展示了如何配置CronTrigger进行周期性调度。
摘要由CSDN通过智能技术生成

先贴出示例的完整的上下文文件(个人使用的是A方案简单实现)。

QuartzTask是业务处理类,work是QuartzTask需要定时执行的方法(QuartzTask+quartz-context.xml即可实现定时任务)

src/main/resources/quartz-context.xml
[html]  view plain  copy
  print ?
  1. <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/task 
    http://www.springframework.org/schema/task/spring-task-4.0.xsd">


        
    <!-- ********************** Quartz调度任务   begin  配置跑批***************** -->
    <!-- 线程执行器配置,用于任务注册 
    <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="10" />
    <property name="maxPoolSize" value="100" />
    <property name="queueCapacity" value="500" />
    </bean>-->
    <!-- =============要调度的工作类(业务对象)============= 将需要添加定时任务调度的类配置到这里 -->
    <bean id="quartzTask" class="com.didi.opms.common.util.QuartzTask"/>


    <!-- ============= 调度业务(定义调用对象和调用对象的方法)============= -->
    <bean id="jobDetail"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <!-- 要调用的对象 -->
    <property name="targetObject" ref="quartzTask" />
    <!-- 要执行的方法名称 -->
    <property name="targetMethod" value="work" />
    <!-- 如果前一个任务还没有结束第二个任务不会启动 false -->
    <property name="concurrent" value="false" />
    </bean>


    <!-- ============= 调度触发器 ============= -->
    <bean id="simpleTrigger"
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="jobDetail" />
    <!-- 每隔3秒钟审批一次 (cron 表达式)
    Cron表达式范例:
                 每隔5秒执行一次:*/5 * * * * ?
                 每隔1分钟执行一次:0 */1 * * * ?
                 每天23点执行一次:0 0 23 * * ?
                 每天凌晨1点执行一次:0 0 1 * * ?
                 每月1号凌晨1点执行一次:0 0 1 1 * ?
                 每月最后一天23点执行一次:0 0 23 L * ?
                 每周星期天凌晨1点实行一次:0 0 1 ? * L
                 在26分、29分、33分执行一次:0 26,29,33 * * * ?
                 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?-->
    <property name="cronExpression" value="0 0 23 * * ?" />
    </bean>


    <!-- ============= 调度工厂 ============= -->
    <bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
    lazy-init="false">
    <property name="triggers">
    <list>
    <ref bean="simpleTrigger" />
    </list>
    </property>
    </bean>
    <!-- **************** Quartz调度任务  end ***************** -->
    </beans>  
下面我们做个简单介绍(简单定时任务上面配置即可实现,下面内容可不用查看):

本文将演示如何通过 Spring 使用 Quartz Scheduler 进行任务调度。Spring 为简化 Quartz 的操作提供了相关支持类。
本文示例使用的相关工具如下:
  • Spring 4.2.2 (发布于 2015 年 10 月)
  • Quartz Scheduler 2.2.2 (发布于 2015 年 10 月)
  • Maven 3
  • JDK 1.7
  • Eclipse Luna Service Release 1 (4.4.1)

步骤 1:新建 Maven 项目

新建maven项目.png

步骤 2:第三方依赖包的引入

Maven pom.xml 编辑如下:
[html]  view plain   copy
  print ?    
  1.         <!-- Quartz framework -->  
  2.         <dependency>  
  3.             <groupId>org.quartz-scheduler</groupId>  
  4.             <artifactId>quartz</artifactId>  
  5.             <version>${quartz.version}</version>  
  6.         </dependency>  

步骤 3:Quartz Scheduler 配置作业

有两种方式在 Spring 中使用 Quartz 来配置一个作业。
A:使用 MethodInvokingJobDetailFactoryBean
这种方式在你想要调用特定 bean 的一个方法的时候很是方便,比另一种方法要简单的多。
[html]  view plain   copy
  print ?
  1. <!-- For times when you just need to invoke a method on a specific object -->  
  2. <bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  3.     <property name="targetObject" ref="myBean" />  
  4.     <property name="targetMethod" value="printMessage" />  
  5. </bean>  

以上作业配置简单调用了  myBean  的  printMessage  方法, myBean  是一个简单的 POJO。
B:使用 JobDetailFactoryBean
如果你需要更高级的设置,需要给作业传递数据,想更加灵活的话就使用这种方式。
[html]  view plain   copy
  print ?
  1. <!-- For times when you need more complex processing, passing data to the scheduled job -->  
  2. <bean name="firstComplexJobDetail"    class="org.springframework.scheduling.quartz.JobDetailFactoryBean">  
  3.     <property name="jobClass" value="com.defonds.scheduler.jobs.FirstScheduledJob" />  
  4.     <property name="jobDataMap">  
  5.         <map>  
  6.             <entry key="anotherBean" value-ref="anotherBean" />  
  7.         </map>  
  8.     </property>  
  9.     <property name="durability" value="true" />  
  10. </bean>  

jobClass  关联到一个继承自  QuartzJobBean  的类,它实现了 Quartz 作业接口。调用到这个作业的时候,它的  executeInternal  将被执行。
jobDataMap  允许我们给相关作业 bean 传递一些数据。在这个例子里,我们将 ScheduledJob 将要使用到的 'anotherBean' 传递给它。
以下是引用 jobclass( FirstScheduledJob )的具体实现。
com.defonds.scheduler.jobs.FirstScheduledJob
[html]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值