使用spring+quartz配置多個定時任務

原文鏈接:https://www.cnblogs.com/shizhijie/p/8243934.html

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版本後, 問題消失...

 

[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等容器中, 啓動後, 就可以看到定時器執行效果, 如下圖所示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章