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. Agent是什么

    广义的Agent包括人类.物理世界的机器人和信息世界的软件机器人. 狭义的Agent专指信息世界中的软件机器人或称软件Agent. 1) 弱定义 Agent用来最一般地说明一个软硬件系统,具有四个特性 ...

  2. Macro definition of snprintf conflicts with Standard Library function declaration

    Macro definition of snprintf conflicts with Standard Library function declaration 即将此处的宏定义注释掉,因为在VS2 ...

  3. What most young programmers need to learn

    In the past 7.5 years I have supervised over a dozen programming interns at Ronimo and have seen hun ...

  4. Java 内部类种类及使用解析【转】

    内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...

  5. (三)Oracle学习笔记—— sql语句

    0. scott 用户默认表介绍 scott用户Tables目录下包含四张表 1. insert(插入)语句 给指定列插入数据: ,'xx'); 插入全部列数据: ,'xx','lll'); 2. u ...

  6. Problem-1000:A + B Problem

    Problem-1000:A + B Problem Sample Code: C 代码: [code] #include int main() { int a,b; while(~scanf(&qu ...

  7. 【转】原生js仿jquery一些常用方法

    现在利用扩展原型的方法实现一些jquery函数: 1.显示/隐藏 ? 1 2 3 4 5 6 7 8 9 10 //hide() Object.prototype.hide = function(){ ...

  8. python with上下文的浅谈

    python中的with一般用于上下文管理,什么是上下文管理,其实平时我们经常会用到,比如连接数据库 查询数据,操作完成后关闭连接. 还比如打开文件写入数据等操作. 具体实例: class Myres ...

  9. emcas自己所熟悉的快捷键

    刚开始用emacs,看完Tutorial了后又用emcas做了一些笔记. 现将自己脑海中觉得比较重要的快捷键一一列出,该列表将持续更新: C = Ctrl  M = Alt 查找或打开(新)文件 C- ...

  10. mock异常

    在类开始的时候: @Rule public ExpectedException expectedEx = ExpectedException.none(); 在方法中执行下面代码: expectedE ...