• Quartz 与 Spring 集成使用的实例


    们通过Spring 的IOC来与Quartz集成使用,对于定时任务,我们可以让这个应用做为jar 小工具在linux下跑,也可以将应用单独放在一个容器里跑。这个视情况而定
    一下是一个简单的应用,quartz + Spring 集成使用的核心就这Spring的配置文件

     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" 
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:aop="http://www.springframework.org/schema/aop" 
     6     xmlns:tx="http://www.springframework.org/schema/tx"
     7     xsi:schemaLocation="http://www.springframework.org/schema/beans         
     8         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
     9         http://www.springframework.org/schema/context   
    10         http://www.springframework.org/schema/context/spring-context-2.5.xsd   
    11         http://www.springframework.org/schema/aop   
    12         http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
    13         http://www.springframework.org/schema/tx   
    14         http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    15 
    16     <!-- *************************** 工作任务调度 *************************** -->
    17 
    18     <!-- 要调用的工作类 -->
    19     <bean id="quartzJob_common" class="com.quartz.job.DoJobMethod"></bean>
    20 
    21     <!-- 可继续加新的任务   -->
    22     <!-- 要调用的工作类结束 -->
    23 
    24     <!-- 定义调用对象和调用对象的方法 -->
    25     <bean id="jobtask1"
    26         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    27         <!-- 调用的类 -->
    28         <property name="targetObject">
    29             <ref bean="quartzJob_common" />
    30         </property>
    31         <!-- 调用类中的方法 -->
    32         <property name="targetMethod">
    33             <value>doMethod1</value>
    34         </property>
    35     </bean>
    36 
    37     <bean id="jobtask2"
    38         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    39         <!-- 调用的类 -->
    40         <property name="targetObject">
    41             <ref bean="quartzJob_common" />
    42         </property>
    43         <!-- 调用类中的方法 -->
    44         <property name="targetMethod">
    45             <value>doMethod2</value>
    46         </property>
    47     </bean>
    48     <!-- 可继续加新的   -->
    49     <!-- 定义调用对象和调用对象的方法结束 -->
    50 
    51 
    52     <!-- 定义触发时间 -->
    53     <bean id="doTime1" class="org.springframework.scheduling.quartz.CronTriggerBean">
    54         <property name="jobDetail">
    55             <ref bean="jobtask1" />
    56         </property>
    57         <!-- cron表达式 此处定义为每天零辰00:15执行任务 -->
    58         <property name="cronExpression">
    59             <value>0 15 00 ? * *</value>
    60             <!--<value>10 * * ? * *</value>-->
    61         </property>
    62     </bean>
    63     <bean id="doTime2" class="org.springframework.scheduling.quartz.CronTriggerBean">
    64         <property name="jobDetail">
    65             <ref bean="jobtask2" />
    66         </property>
    67         <!-- cron表达式   此处定义每1分钟触发一次-->
    68         <property name="cronExpression">
    69             <value>0 */1 * ? * *</value>
    70         </property>
    71     </bean> 
    72 
    73     <bean id="doTime3" class="org.springframework.scheduling.quartz.CronTriggerBean">
    74         <property name="jobDetail">
    75             <ref bean="jobtask3" />
    76         </property>
    77         <!-- cron表达式   此处定义每天上午10:30和晚上22:20触发 即每半天触发一次-->
    78         <property name="cronExpression">
    79             <value>0 30,20 10,22 ? * *</value>
    80             <!--<value>10 * * ? * *</value> -->
    81         </property>
    82     </bean>
    83     <!-- 可继续加新的   -->
    84     <!-- 定义触发时间结束 -->
    85 
    86 
    87     <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序   -->
    88     <bean id="start_common" lazy-init="false" autowire="no"    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    89         <property name="triggers">
    90             <list>
    91                 <ref bean="doTime1" />
    92                 <ref bean="doTime2" />
    93                 <!-- 可继续加新的   -->
    94 
    95             </list>
    96         </property>
    97     </bean>
    98     <!-- 总管理类结束   -->
    99 </beans>

    下面是一个调度器的入口(多线程)

     1 package com.quartz.job;
     2 
     3 /**
     4  * 任务调度的其中一个入口
     5  * 这个入口类需要这Spring配置文件contextApplication.xml中定义
     6  * 这个入口类可以定义一个或多个
     7  * 该类里的方法,将会有单独的线程来运行
     8  * @author Administrator
     9  *
    10  */
    11 public class DoJobMethod {
    12 
    13     public void doMethod1() {
    14         System.out.println("我是任务调度的第一个方法");
    15     }
    16     
    17     public void doMethod2() {
    18         System.out.println("我是任务调度的第二个方法");
    19     }
    20 }

    要把这web.xml里配置启动加载spring配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.4" 
     3     xmlns="http://java.sun.com/xml/ns/j2ee" 
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     6     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     7   
     8       <listener>
     9         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    10     </listener>    
    11     <context-param>
    12         <param-name>contextConfigLocation</param-name>
    13         <param-value>/WEB-INF/applicationContext.xml</param-value>
    14     </context-param>
    15 </web-app>

    我们经常在这里定义的触发器条件都是比较有规律的,如果你想做到在容器初始化时候调用一下这个任务,就需要一个过滤器来监听容器,用以初始化。

    在spring容器初始化这个jobbean时候,指定一个init-method。在这个方法里调用其他的任务方法,这样可以简单解决容器初始化时候做任务
    1. 指定init-method

    1 <!-- 要调用的工作类 -->
    2 <bean id="quartzJob_common" class="com.quartz.job.DoJobMethod" init-method="doMethod"></bean>

    2. 这init-method里调用任务方法

     1 public class DoJobMethod {
     2 
     3     public void doMethod() {
     4         doMethod1();
     5         doMethod2();
     6     }
     7     
     8     public void doMethod1() {
     9         System.out.println("我是任务调度的第一个方法");
    10     }
    11     
    12     public void doMethod2() {
    13         System.out.println("我是任务调度的第二个方法");
    14     }
    15 }
  • 相关阅读:
    返回一个整数数组中最大子数组的和——首尾相接
    第四周学习进度
    数组--二维数组求最大子数组
    第三周个人作业--数组从文件读取返回子数组的最大值
    第三周学习进度
    第二周个人作业--数组
    开课博客
    《软件需求工程》阅读笔记03
    河北省重大技术需求征集系统(8)
    等待网站响应时间分析
  • 原文地址:https://www.cnblogs.com/smart9595/p/3713055.html
Copyright © 2020-2023  润新知