`
zengshaotao
  • 浏览: 788797 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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"/>

 
Java代码  收藏代码
  1. @Component("taskJob")   
  2. public class SequenceGenerator {  
  3.       
  4.     @Scheduled(cron = "0 42 15 * * ?")   
  5.     public void restartSequence(){  
  6.         try{  
  7.             System.out.println("===============测试=====================");  
  8.         }catch(Exception e){  
  9.             e.printStackTrace();  
  10.         }  
  11.     }  
  12. }  
 

今天升级了下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

分享到:
评论

相关推荐

    Spring4.X+Quartz2.X

    在标题"Spring4.X+Quartz2.X"中,我们关注的是如何将这两个框架集成到一个项目中,实现基于Spring的定时任务管理。Spring4.X版本引入了一些新特性,比如对Java 8的全面支持、WebSocket支持以及对RESTful服务的改进,...

    Spring2.x集成Quartz调度框架

    **Spring2.x集成Quartz调度框架** 在Java应用开发中,常常需要进行任务调度,例如定时执行某些业务逻辑。Quartz是一款强大的、开源的作业调度框架,它支持复杂的调度策略和集群环境。Spring框架则提供了良好的企业...

    Spring+3.x企业应用开发实战光盘源码,保证可用

    3. **JSR-303/JSR-349(Bean验证)**:Spring 3.x集成了Bean验证标准,允许开发者在服务层进行数据校验,并将错误信息传递到视图层。 4. **JDBC模板**:Spring 3.x改进了JdbcTemplate,提供了更高级别的抽象,如...

    spring3-quartz1.x

    在Spring3中整合Quartz1.8.6,可以方便地管理并执行定时任务,但随着Spring框架的升级,如升级到Spring4,可能需要与更新版本的Quartz(如2.x)进行集成。 1. **Spring3的IoC容器与Quartz的结合** Spring3的...

    Spring3.x企业应用开发实战书中源码

    8. **集成其他框架**:Spring3.x具有很好的可扩展性,能够与许多其他框架无缝集成,如Struts、JSF、EJB、Quartz等,为开发者提供了灵活的选择。 9. **RESTful支持**:Spring3.x强化了对RESTful风格的Web服务的支持...

    Spring3.x企业应用开发实战源码.rar

    作者陈雄华和林开雄通过这本书,为读者揭示了Spring 3.x版本的核心特性和最佳实践,旨在帮助开发者高效地利用Spring进行系统构建。随书附带的源码是学习和理解书中概念的重要辅助资源,包含了17个文件夹,每个文件夹...

    精通Spring 4.x 企业应用开发实战高清pdf

    《精通Spring 4.x 企业应用开发实战》是一本针对Spring框架4.x版本深入学习的实战指南,旨在帮助开发者快速掌握Spring的核心概念和技术,并能在实际的企业级项目中灵活运用。这本书详细介绍了Spring 4.x的各种特性,...

    spring3.x企业应用实战开发-源码

    通过阅读和分析这些源码,开发者不仅可以掌握Spring 3.x的使用技巧,还能深入理解其设计思想,提高解决实际问题的能力。对于想要在企业级应用开发中熟练运用Spring的开发者来说,这是一份不可多得的学习材料。

    Spring Quartz1.8.x

    1. **Spring集成Quartz**:Spring通过`org.springframework.scheduling.quartz`包提供了与Quartz的集成,可以方便地在Spring应用上下文中配置Job、Trigger以及Scheduler。这包括使用`SchedulerFactoryBean`来启动和...

    Spring3.x知识点总结

    - 集成Quartz、Spring Batch进行任务调度和批量处理。 - 集成邮件服务、定时任务、缓存(如EhCache)等。 7. **Spring Security** - 提供全面的安全管理,包括认证、授权、CSRF防护等功能。 - 可以通过配置或...

    Spring3.x API_zh

    "Spring3.x API_zh"是Spring 3.x版本的中文API文档,它包含了详细的类库、接口和方法描述,是开发者理解和使用Spring框架的重要参考资料。 1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性之一...

    Spring 3.x企业应用开发实战

    5. **Spring集成**:Spring 3.x增强了与其他流行技术的集成,如JSF、Struts、EJB、Quartz等,使得开发者可以利用Spring构建混合型的应用架构。 6. **测试支持**:Spring提供了JUnit支持、Mock对象工具,以及对...

    Spring+Quartz2

    在压缩包 "Spring3+Quartz2" 中,可能包含的是一个 Spring 3.x 版本与 Quartz2 结合使用的示例项目,你可以通过解压并运行该项目,学习如何在实际项目中实现类似的功能。记得根据你的具体需求进行适当的修改和配置。

    基于spring-boot 2.x + quartz 的CRUD任务管理系统,适用于中小项目

    在 2.x 版本中,Spring Boot 提供了更多的稳定性和新特性,如对 Spring Framework 5.x 的支持、Spring Data 的增强以及对新版本的依赖管理。 Quartz 是一个开源的作业调度库,它允许程序创建、调度和执行重复性任务...

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

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

    spring集成quartz所需文件

    在描述中提到 "spring和quartz1.x及quartz2.x集成",这意味着我们要关注的是两种不同版本的 Quartz。Quartz 1.x 是较早的版本,而 Quartz 2.x 是后续的更新,增加了许多新特性,提升了性能和稳定性。集成时需要注意...

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

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

    精通spring3.pdf

    - **企业级应用集成**:Spring框架提供了与消息中间件(如ActiveMQ)、任务调度器(如Quartz)等企业级服务的集成支持。 ### 总结 “精通spring3.pdf”这本书籍深入浅出地介绍了Spring框架的相关知识,适合希望...

    quartz所需jar包 1.6.0、1.8.5、2.2.1三个版本

    - 使用`quartz-2.2.1.jar`时,可能需要额外引入一些依赖,比如Spring的整合包,以便更好地与其他应用框架集成。 在选择使用哪个版本时,应考虑项目需求、所使用的Java版本以及对性能和稳定性的要求。较新的版本...

Global site tag (gtag.js) - Google Analytics