Spring被用在了越来越多的项目中, quartz也被公认为是比较好用的定时器设置工具, 在这里通过一个demo说明如何使用spring和quartz配置多个定时任务.

环境: eclipse + maven + spring 3.0.6.RELEASE版本 + quartz 1.8.6版本

一. 准备工作

项目目录结构截图:

需要引入的jar包, 这里是采用maven的dependency依赖; 如果没有使用maven, 可以对照着上面的jar包截图一一进行下载. 这里唯一需要注意的就是, 如果使用spring 3.1以下的版本, quartz就需要相应的2.0以下版本, 否则会导致 org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.scheduling.quartz.CronTriggerBean] for bean with name 'cronTrigger_1' defined in file [E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\git-common\WEB-INF\classes\applicationContext.xml]: problem with class file or dependent class; nested exception isjava.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class 错误.

后续: 后来使用了spring 4.0.5.RELEASE版本+quartz 2.2.1版本, 还是报出了以上错误, 将quartz降低为1.8.6版本后, 问题消失...

  1. <properties>
  2. <springframework.version>3.0.6.RELEASE</springframework.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>javax.servlet</groupId>
  7. <artifactId>servlet-api</artifactId>
  8. <version>2.5</version>
  9. <scope>provided</scope>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-context</artifactId>
  14. <version>${springframework.version}</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework</groupId>
  18. <artifactId>spring-context-support</artifactId>
  19. <version>${springframework.version}</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework</groupId>
  23. <artifactId>spring-tx</artifactId>
  24. <version>${springframework.version}</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-web</artifactId>
  29. <version>${springframework.version}</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.quartz-scheduler</groupId>
  33. <artifactId>quartz</artifactId>
  34. <version>1.8.6</version>
  35. </dependency>
  36. </dependencies>

二. 程序代码及配置代码

测试代码就简单的打印出一句话

  1. package com.quartz.demo;
  2. import java.util.Date;
  3. public class Job1Demo {
  4. public void sayHello() {
  5. System.out.println(new Date() + " -> Hello, 我是任务 1");
  6. }
  7. }
  1. package com.quartz.demo;
  2. import java.util.Date;
  3. public class Job2Demo {
  4. public void sayHello() {
  5. System.out.println(new Date() + " -> Hello, 我是任务 2");
  6. }
  7. }

Spring配置文件applicationContext.xml中配置了要注入的bean, 定时任务, 任务执行周期时间等

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12. <!-- 任务1配置 -->
  13. <bean name="job1" class="com.quartz.demo.Job1Demo"/>
  14. <bean id="jobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  15. <!-- 执行的类 -->
  16. <property name="targetObject">
  17. <ref bean="job1" />
  18. </property>
  19. <!-- 类中的方法 -->
  20. <property name="targetMethod">
  21. <value>sayHello</value>
  22. </property>
  23. </bean>
  24. <bean id="cronTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerBean">
  25. <property name="jobDetail">
  26. <ref bean="jobDetail_1" />
  27. </property>
  28. <!-- 每一秒钟执行一次 -->
  29. <property name="cronExpression">
  30. <value>0/1 * * * * ?</value>
  31. </property>
  32. </bean>
  33. <!-- 任务2配置 -->
  34. <bean name="job2" class="com.quartz.demo.Job2Demo"/>
  35. <bean id="jobDetail_2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  36. <property name="targetObject">
  37. <ref bean="job2" />
  38. </property>
  39. <property name="targetMethod">
  40. <value>sayHello</value>
  41. </property>
  42. </bean>
  43. <bean id="cronTrigger_2" class="org.springframework.scheduling.quartz.CronTriggerBean">
  44. <property name="jobDetail">
  45. <ref bean="jobDetail_2" />
  46. </property>
  47. <property name="cronExpression">
  48. <value>0/1 * * * * ?</value>
  49. </property>
  50. </bean>
  51. <!-- 总配置 -->
  52. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  53. <!-- 添加触发器 -->
  54. <property name="triggers">
  55. <list>
  56. <ref bean="cronTrigger_1" />
  57. <ref bean="cronTrigger_2" />
  58. </list>
  59. </property>
  60. </bean>
  61. </beans>

web.xml, 在spring容器启动时读取加载applicationContext.xml配置文件

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4. <web-app>
  5. <display-name>Archetype Created Web Application</display-name>
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>
  9. classpath:*.xml
  10. </param-value>
  11. </context-param>
  12. <!-- Spring 容器启动监听器 -->
  13. <listener>
  14. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  15. </listener>
  16. </web-app>

三. 执行结果

将web项目部署到tomcat等容器中, 启动后, 就可以看到定时器执行效果, 如下图所示

转自http://blog.csdn.net/pansanday/article/details/42466173

使用spring+quartz配置多个定时任务的更多相关文章

  1. spring quartz 配置多个定时任务

    1.配置文件-quartz-1.7.3jar   spring版本为3.1.3jar <?xml version="1.0" encoding="UTF-8&quo ...

  2. spring quartz 配置实现定时任务 详解

    一. 编写定时任务JAVA类 比如: public class QuartzJob {     public QuartzJob(){         System.out.println(" ...

  3. Spring+Quartz配置定时任务

    一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合 ...

  4. Spring+Quartz实现动态添加定时任务

    发布时间:2018-12-03   技术:spring4.0.2+quartz2.2.1   概述 在最近工作中,由于涉及到定时任务特别多,而这些工作又是由下属去完成的,在生成环境中经常会出现业务逻辑 ...

  5. spring quartz 配置

    quartz简介 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务.任务调度本身涉及到多线程 ...

  6. Spring + Quartz配置实例

    Spring为创建Quartz的Scheduler.Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处.此外Spring还提供了一些便 ...

  7. spring quartz 配置及说明

    方式一,jobDetail的bean利用MethodInvokingJobDetailFactoryBean 工厂包装 : ()定义一个bean,执行具体的业务操作. <bean id=&quo ...

  8. Spring+quartz 实现定时任务job集群配置

    为什么要有集群定时任务? 因为如果多server都触发相同任务,又同时执行,那在99%的场景都是不适合的.比如银行每晚24:00都要汇总营业额.像下面3台server同时进行汇总,最终计算结果可能是真 ...

  9. Spring+quartz 实现定时任务job集群配置【原】

    为什么要有集群定时任务? 因为如果多server都触发相同任务,又同时执行,那在99%的场景都是不适合的.比如银行每晚24:00都要汇总营业额.像下面3台server同时进行汇总,最终计算结果可能是真 ...

随机推荐

  1. IntelliJ IDEA 控制台中文乱码

    1. 预热 刚刚接触IntelliJ IDEA几天,在易用性方面的确比Eclipse好很多,比较智能,各种插件.工具都已经集成,和Mac OS X类似——开箱即用. 但是还是老大难问题——中文乱码,让 ...

  2. EffectiveJava(23)为什么不能在新生代码中使用原生态类型

    泛型类和泛型接口 声明一个或者多个类型参数的类或者接口. 为什么不要在新代码中使用原生态类型 原生态类型,即泛型不带参数的类型 如List的list,list就是其原生态类型 1.使用原生态类型,插入 ...

  3. 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?

    本文来自微信开发团队yanyang的技术分享. 1.引言 相信大家都遇到过一段特殊文本可以让iOS设备所有app闪退的经历.前段时间大年初一,又出现某个印度语字符引起iOS11系统奔溃,所幸iOS版微 ...

  4. ural 1057 Amount of degrees 【数位dp】

    题意:求(x--y)区间转化为 c 进制 1 的个数为 k 的数的出现次数. 分析:发现其满足区间减法,所以能够求直接求0---x 的转化为 c 进制中 1 的个数为k的数的出现次数. 首先用一个数组 ...

  5. Ubuntu 11.04 (Natty) 已经停止支持 但可以使用old-releases源了

    Ubuntu 11.04 (Natty) 已经停止支持,但可以使用old-releases源了,先备份源列表文件: sudo cp /etc/apt/sources.list /etc/apt/sou ...

  6. android:numColumns="auto_fit" 失效问题

    GridView 设置此属性无效:android:numColumns="auto_fit" ,请确认已经设置过 android:columnWidth="*dp&quo ...

  7. JsonConvert.SerializeObject() 输出josn格式 也就是序列化。

    JsonConvert.SerializeObject() 输出josn格式  也就是序列化. JSON.parse 反序列化  http://www.cnblogs.com/ahlx/p/52280 ...

  8. WP8控件进度条(ProgressBar)的使用

    --前台代码 <Grid x:Name="ContentPanel"  Grid.Row="1" Margin="0,0,24,0"& ...

  9. <转>程序员的心理疾病

    注:本文转自大神王垠的博客 原文出处 http://www.yinwang.org/blog-cn/2014/02/09/programmer-mental/ 说实话,虽然似乎为之奋斗了十多年,在真正 ...

  10. 【MyBatis学习10】高级映射之多对多查询

    本文来总结一下mybatis中的多对多映射,从第8节的文章中可以看出,用户表和商品表示多对多关系,它们两的多对多是通过订单项和订单明细这两张表所关联起来的,那么这一节主要来总结一下用户表和商品表之间的 ...