Spring集成Quartz定时任务

原文:http://stevex.blog.51cto.com/4300375/1351980

           http://shmilyaw-hotmail-com.iteye.com/blog/2169047

          http://jingyan.baidu.com/article/0f5fb099cc244d6d8234ea6b.html

 

Spring最大的能耐之一就是提供对流行框架的无缝集成,Quartz作为Java实现的工业标准级别的定时任务调度器,Spring对其提供了无缝的集成,并大大简化了开发工作,这是使用Spring比较爽的地方之一。

 

一个任务调度器最基本的三个元素是

  • Job(or Task):需要定时处理的事情

  • Trigger: 事件触发时间点(一次性的、固定周期性的、像Linux Cron Jobs 灵活配置的)

  • Scheduler: 调度器

 

Job与Trigger是一对一的关系,Scheduler与Trigger是一对多的关系。

先看一个Spring配置这三个元素的示例:

   <!-- 定时加载的目标类 -->

< 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 >
        <property name="concurrent" value="false"></property> <!-- 不能并发作业,当 SimpleTrigger时,是第1次任务完成后,立即执行第2次任务;当 CronTrigger时,则必须要设定的间隔时间点后才立即执行  -->
     </ 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如果不允许作业被并发调度。

 

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

 

Spring同时提供对Quartz的TriggerListenerJobListener的支持,这类似AOP编程,可以在任务执行前后进行检查等工作,通过简单的属性配置可实现。

 

      一个maven的工程,其类型依然是archetype-quickstart。唯一不同的地方在于我们引入更多spring的库,其pom.xml文件内容如下:

<dependency>  

    <groupId>org.quartz-scheduler</groupId>  

    <artifactId>quartz</artifactId>  

    <version>1.0.0</version>  

</dependency>  

就可以试试了

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值