Spring框架结合Quartz实现任务调度实例

1、编写调用类
QuartzJob.java
view plaincopy to clipboardprint?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150package com.kedacom.quartz;     public class QuartzJob   {     public void run()     {       System.out.println("Quartz 的任务调度!!! ");     }   }  package com.kedacom.quartz;

public class QuartzJob
{
  public void run()
  {
    System.out.println("Quartz 的任务调度!!! ");
  }
}  2、设置 Spring 的配置文件applicationContext-schedule.xml
view plaincopy to clipboardprint?<? xml version="1.0" encoding="UTF-8" ?>  <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  <beans>    <!--- 定义 bean 对应的类 -->    <bean id ="quartzJob" class ="com.kedacom.quartz.QuartzJob"></bean>      <!-- 定义任务调用的对象和方法 -->    <bean id ="jobTask" class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">      <property name ="targetObject">        <ref bean ="quartzJob"/>      </property>      <property name ="targetMethod">        <value>run</value>      </property>    </bean>      <!-- 定义任务触发时间 -->    <bean id ="runTask" class ="org.springframework.scheduling.quartz.CronTriggerBean">      <property name ="jobDetail">        <ref bean ="jobTask"/>      </property>      <property name ="cronExpression">        <value> 0/5 /* * * * ? </value>      </property>    </bean>      <!-- 总管理类  如果将 lazy-init='false' 那么容器启动就会执行调度程序  -->    <bean id ="schedulerFactory" lazy-init ="false" autowire ="no" class ="org.springframework.scheduling.quartz.SchedulerFactoryBean">      <property name ="triggers">        <list>          <ref bean ="runTask"/>        </list>      </property>    </bean>  </beans>  <? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <!--- 定义 bean 对应的类 -->
  <bean id ="quartzJob" class ="com.kedacom.quartz.QuartzJob"></bean>

  <!-- 定义任务调用的对象和方法 -->
  <bean id ="jobTask" class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name ="targetObject">
      <ref bean ="quartzJob"/>
    </property>
    <property name ="targetMethod">
      <value>run</value>
    </property>
  </bean>

  <!-- 定义任务触发时间 -->
  <bean id ="runTask" class ="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name ="jobDetail">
      <ref bean ="jobTask"/>
    </property>
    <property name ="cronExpression">
      <value> 0/5 /* * * * ? </value>
    </property>
  </bean>

  <!-- 总管理类  如果将 lazy-init='false' 那么容器启动就会执行调度程序  -->
  <bean id ="schedulerFactory" lazy-init ="false" autowire ="no" class ="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name ="triggers">
      <list>
        <ref bean ="runTask"/>
      </list>
    </property>
  </bean>
</beans> 其中:定义任务触发时间的 cronExpression 是整个任务调度的核心部分,下面进行说明。

2.1、cronExpression包括以下7个字段:


小时
月内日期

周内日期
年(可选字段)
2.2、引入特殊字符,如下所示:
反斜线( / )字符表示增量值。例如,在秒字段中" 5/15 "代表从第 5 秒开始,每 15 秒一次。
问号( ? )字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入" ? ",表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果" L "单独存在,就等于" 7 ",否则代表当月内周内日期的最后一个实例。所以" 0L "表示安排在当月的最后一个星期日执行。
*在月内日期字段中的字母( W )字符把执行安排在最靠近指定值的工作日。把" 1W "放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
井号( # )字符为给定月份指定具体的工作日实例。把" MON#2 "放在周内日期字段中,表示把任务安排在当月的第二个星期一。
星号( * )字符是通配字符,表示该字段可以接受任何可能的值。
2.3、相关字段允许的值和特殊字符,如下表所示
字段  允许值  允许的特殊字符 
秒  0-59  , - * / 
分  0-59  , - * / 
小时  0-23  , - * / 
日期  1-31  , - * ? / L W C 
月份  1-12 或者 JAN-DEC  , - * / 
星期  1-7 或者 SUN-SAT  , - * ? / L C # 
年(可选)  留空 , 1970-2099 ,  , - * / 

2.4、表达式范例及说明
表达式  说明 
0 0 12 * * ?  每天中午 12 点触发 
0 15 10 ? * *  每天上午 10:15 触发 
0 15 10 * * ?  每天上午 10:15 触发 
0 15 10 * * ? 2005  2005 年的每天上午 10:15 触发 
0 * 14 * * ?  在每天下午 2 点到下午 2:59 期间的每 1 分钟触发 
0 0/5 14 * * ?  在每天下午 2 点到下午 2:55 期间的每 5 分钟触发 
0 0/5 14,18 * * ?  在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发 
0 0-5 14 * * ?  在每天下午 2 点到下午 2:05 期间的每 1 分钟触发 
0 10,44 14 ? 3 WED  每年三月的星期三的下午 2:10 和 2:44 触发 
0 15 10 ? * MON-FRI  周一至周五的上午 10:15 触发 
0 15 10 15 * ?  每月 15 日上午 10:15 触发 
0 15 10 L * ?  每月最后一日的上午 10:15 触发 
0 15 10 ? * 6L  每月的最后一个星期五上午 10:15 触发 
0 15 10 ? * 6L 2002-2005  2002 年至 2005 年的每月的最后一个星期五上午 10:15 触发 
0 15 10 ? * 6#3  每月的第三个星期五上午 10:15 触发 

3、编写任务调度测试类
QuartzTest.java
view plaincopy to clipboardprint?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150package com.kedacom.quartz;     import org.springframework.context.ApplicationContext;   import org.springframework.context.support.ClassPathXmlApplicationContext;   public class QuartzTest   {     public  static  void main(String [] args)     {       System.out.println("Test start ...... ");       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-schedule.xml");       // 如果配置文件中将 startQuertz bean 的 lazy-init 设置为 false 则不用实例化       context.getBean("schedulerFactory ");       System.out.print("Test end ...... ");     }   }  package com.kedacom.quartz;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QuartzTest
{
  public  static  void main(String [] args)
  {
    System.out.println("Test start ...... ");
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-schedule.xml");
    // 如果配置文件中将 startQuertz bean 的 lazy-init 设置为 false 则不用实例化
    context.getBean("schedulerFactory ");
    System.out.print("Test end ...... ");
  }
}

4、设置web.xml使启动时加载Spring配置文件applicationContext-schedule.xml
view plaincopy to clipboardprint?

<context-param>    

  <param-name>contextConfigLocation</param-name> 

     <param-value>classpath*:applicationContext-schedule.xml</param-value>   </context-param>      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext-schedule.xml</param-value>
     </context-param>

5、启动web应用系统,即可在控制台中看到每5秒打出"Quartz的任务调度!!!"


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值