`

Spring3.x集成Quartz2.x 版本问题

 
阅读更多

转载:http://www.cnblogs.com/Irving/archive/2013/03/11/2953894.html

 

Quartz调度器为调度工作提供了更丰富的支持。和Java定时器一样,可以使用Quartz来每隔多少毫秒执行一个工作。但Quartz比Java Timer更先进之处在于它允许你调度一个工作在某个特定的时间或日期执行。

Spring对任务调度的支持有两种不同的形式:基于JDK Timer和基于Quartz。  
Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用,只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。
 QuartzJobBean是Quartz中与Java的TimerTask等价的类。它实现了org.quartz.Job接口。MethodInvokingJobDetailFactoryBean

Spring提供了两个触发器:SimpleTriggerBean和CronTriggerBean。

2.x的方式

复制代码
<bean id="schedulerService" class="cn.base.web.scheduler.SchedulerServiceImpl" />
    <bean id="loadHotelJobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="schedulerService" />
        </property>
        <property name="targetMethod">
            <value>loadHotelDetail</value>
        </property>
        <property name="concurrent">
            <value>false</value>
        </property>
    </bean>
    <bean id="loadHotelTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref local="loadHotelJobDetail" />
        </property>
        <property name="cronExpression">
            <!-- 凌晨3点触发   
             <value>0 0 3 * * ?</value>
            -->
            <!--<value>0 0/3 11,12 * * ?</value>-->
            <!--每个星期天凌晨2点触发-->

            <!-- 每隔两分钟执行一次 -->
            <value>0 */2 * * * ?</value>

        </property>
    </bean>

    <bean id="pushHotelPriceJobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="schedulerService" />
        </property>
        <property name="targetMethod">
            <value>pushHotelPriceCache</value>
        </property>
        <property name="concurrent">
            <value>false</value>
        </property>
    </bean>
    <bean id="pushHotelPriceTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref local="pushHotelPriceJobDetail" />
        </property>
        <property name="cronExpression">
            <!-- 凌晨24点触发
             <value>0 0 0 * * ?</value>
            -->
            <!--<value>0 0/3 11,12 * * ?</value>-->
            <!--每个星期天凌晨2点触发-->

            <!-- 每隔两分钟执行一次-->
            <value>0 */2 * * * ?</value>

        </property>
    </bean>
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
        lazy-init="false" autowire="no">
        <property name="triggers">
            <list>
                <ref local="loadHotelTrigger" />
                <ref local="pushHotelPriceTrigger" />
            </list>
        </property>
        <property name="autoStartup">
            <!-- 定时器开关 -->
            <value>true</value>
        </property>
    </bean>
复制代码

基于注解:推荐使用

复制代码
    <?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:aop="http://www.springframework.org/schema/aop"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/context 
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
 default-lazy-init="false">

 <!—开启这个配置,spring才能识别@Scheduled注解   -->
 <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
 <task:scheduler id="qbScheduler" pool-size="10"/>

 
@Component("taskJob") 
public class SequenceGenerator {
	
	@Scheduled(cron = "0 42 15 * * ?") 
	public void restartSequence(){
		try{
			System.out.println("===============测试=====================");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
 

今天升级了下quertz的版本,发现不兼容因为是Spring 3.x版本中内置的Quartz版本是<2.0的,在使用最新的Quartz包(>2.0)之后,接口不兼容。 报如下错误

java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class

几种方式 
1.降低Quartz版本,降到1.X (我的是quartz-1.8.6) 
2.升级Spring版本到3.1+,将原来的**TriggerBean替换成**TriggerFactoryBean,例如CronTriggerBean 就可以替换成 CronTriggerFactoryBean。 
3.Spring3.x中基于注解

quartz 时间配置规则

格式: [秒] [分] [小时] [日] [月] [周] [年]

序号 说明 是否必填 允许填写的值 允许的通配符
1 0-59   , - * /
2 0-59   , - * /
3 小时 0-23   , - * /
4 1-31   , - * ? / L W
5 1-12 or JAN-DEC   , - * /
6 1-7 or SUN-SAT   , - * ? / L #
7 empty 或 1970-2099 , - * /

通配符说明: 
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。 
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置 为"?" 具体设置为 0 0 0 10 * ? 
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。 
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发 
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。 
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本 月最后一个星期五" 
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").

小提示

'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资 )

# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用 在母亲节和父亲节再合适不过了)

小提示

周字段的设置,若使用英文字母是不区分大小写的 MON 与mon相同.

常用示例:

0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 2005 2005年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 
每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发
0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发
0 15 10 15 * ? 每月15号上午10点15分触发
0 15 10 L * ? 每月最后一天的10点15分触发
0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)

Refer: 
http://resp.iteye.com/blog/1490575 
http://blog.csdn.net/52rainbow/article/details/4004206 
http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html

分享到:
评论

相关推荐

    Spring2.x集成Quartz调度框架

    NULL 博文链接:https://csdxqzp.iteye.com/blog/665290

    spring3-quartz1.x

    在网上扒拉下来的spring3和quartz1.8.6版本集成的代码,貌似spring4和quartz1.8.6就集成不了了,得升到quartz 2.x

    spring集成quartz所需文件

    spring和quartz1.x及quartz2.x集成,具体见博客

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring+3.x企业应用开发实战光盘源码(全)

     第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。  第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring3x集成Quartz2x示例工程 两种引入方式

    这是一个JAVA web工程,解压后可直接导入到ECLIPSE中,部署到tomcat中后可以直接运行; 里面有两个定时任务, 一个是使用普通JAVA类,通过Spring使用...Quartz2.2.0 版本 JDK1.7 Tomcat7.0.52 cesar2008@gmail.com

    ssm框架+quartz2.2Jar包

    spring4.2.2版本,springmvc,mybatis+quartz2.2

    陈开雄 Spring+3.x企业应用开发实战光盘源码.zip

    陈开雄 Spring+3.x企业应用开发实战光盘源码 !!!!压缩包的jar包太多,太大无法上传,请谅解,需要的可以联系我 QQ:349721489 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识。 ...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    注意 'spring-test.jar' 包含了上个版本 'spring-mock.jar'中的一切,因此如果是单元或集成测试,可以直接取代。 Spring 2.5的 'spring-tx.jar' 取代了 'spring-dao.jar' 和'spring-jca.jar' 文件,表达其对...

    spring chm文档

    13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: RequestToViewNameTranslator 13.12. 其它资源 14. 集成视图技术 14.1. 简介 14.2. JSP和JSTL 14.2.1. 视图解析器 14.2.2. 'Plain-...

    Spring 2.0 开发参考手册

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签...

    Spring中文帮助文档

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons标签 13.9.8. password标签 13.9.9. select标签 13.9.10. option标签 ...

    Spring API

    11.7.2. 处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中...

    Spring攻略(第二版 中文高清版).part2

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    Spring攻略(第二版 中文高清版).part1

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    Spring in Action(第二版 中文高清版).part2

    A.2 把Spring添加为一个Maven 2依赖项 A.3 Spring与Ant A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元...

    Spring in Action(第二版 中文高清版).part1

    A.2 把Spring添加为一个Maven 2依赖项 A.3 Spring与Ant A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元...

    spring boot集成demo大全.zip

    job(`分布式定时任务`)、swagger(`API接口管理测试`)、security(`基于RBAC的动态权限认证`)、SpringSession(`Session共享`)、Zookeeper(`结合AOP实现分布式锁`)、RabbitMQ(`消息队列`)、Kafka(`消息队列`)、...

Global site tag (gtag.js) - Google Analytics