使用Spring的Quartz支持进行调度
程序中有个高级的调度需求,利用Quartz Scheduler(Quartz(OpenSymphony的提供任务调务类库)可以大大弥补Timer的不足可以使开发者能够完成各种复杂的任务调度)来实现。Spring 为Quartz提供了一些工具类,可以再Bean配置文件中配置调度任务,而不必使用Quartz API进行任何编程。
做个demo,以备后用:
使用Spring 2.5
1,将spring.jar,包放到classpath下
2.新建一个类,用于定时调度:
package com.cl.demo.task;
/**
* @author Chen Lei
*
*/
public class Mytask {
public void excuteTask() {
System.out.println("定时任务:【"+new java.sql.Timestamp(System.currentTimeMillis())+"】");
}
}
3.ApplicationContext.xml文件配置
<!-- 定义调度对象 -->
<bean id="mytask" class="com.cl.demo.task.Mytask"></bean>
<!-- MethodInvokingJobDetailFactoryBean能够定义一个执行特定对象的单个方法的任务-->
<bean id="sprintTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="mytask"/><!--调度对象 -->
<property name="targetMethod" value="excuteTask"/> <!--要执行的方法 -->
</bean>
<!-- 通过CronTriggerBean在Bean配置文件中配置Quartz的cronTrigger对象。jobDetail是sprintTask这个bean,-->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="sprintTask" />
<!-- run every morning at 6 AM -->
<property name="cronExpression" value="59 * * * * ?" />
</bean>
-->
<!--管理触发器的总设置,配置SchedulerFactoryBean实例来创建Scheduler对象,用于允许触发,可以在这个工厂Bean中指定多个触发器。
-->
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list> <!--list中可指定多个触发器-->
<ref local="cronTrigger" />
</list>
</property>
</bean>
4,在Main类中启动触发器,通过这种方式调度任务,可以不用写任何代码。
public class Test {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
运行结果:
---------------------------------------------------------
定时任务:【2009-12-22 14:26:59.015】
定时任务:【2009-12-22 14:27:59.015】
定时任务:【2009-12-22 14:28:59.015】
定时任务:【2009-12-22 14:29:59.015】
定时任务:【2009-12-22 14:30:59.015】
定时任务:【2009-12-22 14:31:59.015】
定时任务:【2009-12-22 14:32:59.015】
定时任务:【2009-12-22 14:33:59.015】
定时任务:【2009-12-22 14:34:59.015】
定时任务:【2009-12-22 14:35:59.015】
定时任务:【2009-12-22 14:36:59.015】
定时任务:【2009-12-22 14:37:59.015】
定时任务:【2009-12-22 14:38:59.015】
定时任务:【2009-12-22 14:39:59.015】
定时任务:【2009-12-22 14:40:59.015】
----------------------------------------------------------
小结:
Spring 为JDK Timer 和Quartz都提供了工具类,能够在Bean配置文件中配置调度任务,无需用JDK Timer 和Quertz API 进行任何编程。如果不用过Spring的支持来使用Quartz (必须在classpath中加入quartz-all-1.6.0.jar,commons-collections.jar,jta.jar均在Spring的lib目录中),需要创建任务类并实现Job接口,然后通过Quartz API对它进行配置和调度。Quartz 支持两种类型的触发器:SimplerTrigger和 CronTrigger。前者允许设定一些trigger属性,如起始时间、终止时间、重复间隔及重复次数;后者接受Unix的cron表达式(本例中使用)。
参考网址:http://static.springsource.org/spring/docs/2.5.x/reference/scheduling.html
-----------------------------------------------------------------------
表达式例子
表达式 解释
0 0 12 * * ? 在每天中午12:00触发
0 15 10 ? * * 每天上午10:15 触发
0 15 10 * * ? 每天上午10:15 触发
0 15 10 * * ? * 每天上午10:15 触发
0 15 10 * * ? 2005 在2005年中的每天上午10:15 触发
0 * 14 * * ? 每天在下午2:00至2:59之间每分钟触发一次
0 0/5 14 * * ? 每天在下午2:00至2:59之间每5分钟触发一次
0 0/5 14,18 * * ? 每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次
0 0-5 14 * * ? 每天在下午2:00至2:05之间每分钟触发一次
0 10,44 14 ? 3 WED 每三月份的星期三在下午2:00和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, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发
0 15 10 ? * 6#3 在每个月的第三个星期五的上午10:15触发
0 0 12 1/5 * ? 从每月的第一天起每过5天的中午12:00时触发
0 11 11 11 11 ? 在每个11月11日的上午11:11时触发.
_________________________________________________
作者:很有意思
出处:http://www.cnblogs.com/chen-lei
关于作者:扛过枪,没机会打仗,现为程序员集团军一名现役程序员
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
如有问题,可以通过chenlei65368@sohu.com 联系我,非常感谢。