• 使用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

  • 相关阅读:
    Java中读取.properties配置文件的通用类
    静态工厂方法中单例的延迟加载技术
    AVL树C++实现
    初探Java反射机制
    项目中一个 1 毫秒引发的问题
    用Java操作数据库Datetime数据
    【转】Linux中的EAGAIN含义
    【转】关于编译链接——gcc/g++
    《Linux多线程编程手册》读书笔记
    《Linux多线程服务端编程——使用muduo C++网络库》读书笔记
  • 原文地址:https://www.cnblogs.com/shizhijie/p/8243934.html
Copyright © 2020-2023  润新知