使用spring+quartz配置多个定时任务

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.pluginsorg.eclipse.wst.server.core mp0wtpwebappsgit-commonWEB-INFclassesapplicationContext.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版本后, 问题消失...

[html] view plain copy
 
  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>  

二. 程序代码及配置代码

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

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

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

[html] view plain copy
 
  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.   
  13.     <!-- 任务1配置 -->  
  14.     <bean name="job1" class="com.quartz.demo.Job1Demo"/>  
  15.     <bean id="jobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  16.         <!-- 执行的类 -->  
  17.         <property name="targetObject">  
  18.             <ref bean="job1" />  
  19.         </property>  
  20.         <!-- 类中的方法 -->  
  21.         <property name="targetMethod">  
  22.             <value>sayHello</value>  
  23.         </property>  
  24.     </bean>  
  25.     <bean id="cronTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  26.         <property name="jobDetail">  
  27.             <ref bean="jobDetail_1" />  
  28.         </property>  
  29.         <!-- 每一秒钟执行一次 -->  
  30.         <property name="cronExpression">  
  31.             <value>0/1 * * * * ?</value>  
  32.         </property>  
  33.     </bean>  
  34.       
  35.     <!-- 任务2配置 -->  
  36.     <bean name="job2" class="com.quartz.demo.Job2Demo"/>  
  37.     <bean id="jobDetail_2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  38.         <property name="targetObject">  
  39.             <ref bean="job2" />  
  40.         </property>  
  41.         <property name="targetMethod">  
  42.             <value>sayHello</value>  
  43.         </property>  
  44.     </bean>  
  45.     <bean id="cronTrigger_2" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  46.         <property name="jobDetail">  
  47.             <ref bean="jobDetail_2" />  
  48.         </property>  
  49.         <property name="cronExpression">  
  50.             <value>0/1 * * * * ?</value>  
  51.         </property>  
  52.     </bean>  
  53.       
  54.     <!-- 总配置 -->  
  55.     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  56.         <!-- 添加触发器 -->  
  57.         <property name="triggers">  
  58.             <list>  
  59.                 <ref bean="cronTrigger_1" />  
  60.                 <ref bean="cronTrigger_2" />  
  61.             </list>  
  62.         </property>  
  63.     </bean>  
  64. </beans>  

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

[html] view plain copy
 
  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.   
  5. <web-app>  
  6.     <display-name>Archetype Created Web Application</display-name>  
  7.     <context-param>  
  8.         <param-name>contextConfigLocation</param-name>  
  9.         <param-value>  
  10.             classpath:*.xml  
  11.         </param-value>  
  12.     </context-param>  
  13.   
  14.     <!-- Spring 容器启动监听器 -->  
  15.     <listener>  
  16.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  17.     </listener>  
  18. </web-app>  

三. 执行结果

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

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

原文地址:https://www.cnblogs.com/shizhijie/p/8243934.html