Spring 3整合Quartz 2实现定时任务

最近工作中需要用到定时任务的功能,虽然Spring3也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大。在考虑之后,决定整合更为专业的Quartz来实现定时任务功能。

首先,当然是添加依赖的jar文件,我的项目是maven管理的,以下的我项目的依赖:

或许你应该看出来了,我的项目是spring整合了mybatis,目前spring的最新版本已经到了4.x系列,但是最新版的mybatis-spring的整合插件所依赖推荐的依然是spring 3.1.3.RELEASE,所以这里没有用spring的最新版而是用了推荐的3.1.3.RELEASE,毕竟最新版本的功能一般情况下也用不到。

--------------------------------------分割线 --------------------------------------

Spring中如何配置Hibernate事务

Struts2整合Spring方法及原理

基于 Spring 设计并实现 RESTful Web Services

Spring-3.2.4 + Quartz-2.2.0集成实例

使用 Spring 进行单元测试

运用Spring注解实现Netty服务器端UDP应用程序

Spring 3.x 企业应用开发实战 PDF完整高清扫描版+源代码

--------------------------------------分割线 --------------------------------------

至于quartz,则是用了目前的最新版2.2.1

之所以在这里特别对版本作一下说明,是因为spring和quartz的整合对版本是有要求的。

spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错。

至于原因,则是spring对于quartz的支持实现,org.springframework.scheduling.quartz.CronTriggerBean继承了org.quartz.CronTrigger,在quartz1.x系列中org.quartz.CronTrigger是个类,而在quartz2.x系列中org.quartz.CronTrigger变成了接口,从而造成无法用spring的方式配置quartz的触发器(trigger)。

在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类。很显然,第二种方式远比第一种方式来的灵活。

这里采用的就是第二种方式。

spring配置文件:

<!-- 使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法-->

<beanid="taskJob"class="com.tyyd.dw.task.DataConversionTask"/>

<beanid="jobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<propertyname="group"value="job_work"/>

<propertyname="name"value="job_work_name"/>

<!--false表示等上一个任务执行完后再开启新的任务-->

<propertyname="concurrent"value="false"/>

<propertyname="targetObject">

<refbean="taskJob"/>

</property>

<propertyname="targetMethod">

<value>run</value>

</property>

</bean>

 

<!-- 调度触发器 -->

<beanid="myTrigger"

class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

<propertyname="name"value="work_default_name"/>

<propertyname="group"value="work_default"/>

<propertyname="jobDetail">

<refbean="jobDetail"/>

</property>

<propertyname="cronExpression">

<value>0/5 * * * * ?</value>

</property>

</bean>

 

<!-- 调度工厂 -->

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4b37c4da949aed8ad2dbbf95cf5949f8.html