Spring Quartz 浅析

今天在解决项目的一个问题的时候(后期维护),发现项目中有用到Spring配置Quartz,花了点时间去熟悉了一下:

 

1. Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz。

 

2. 驱动工作流:比如,如果新创建的流程任务需要在2小时内处理完,则在2小时后Quartz会检查订单是否成功处理。如果没有处理,则Quartz会依据工作流定义的规则来对订单进行处理,销毁它,或者进行其他处理。

 

3. 系统维护工作:比如,在每个工作日的固定时间将RDBMS中的内容导出为XML文件。

 

下面是项目中用到的Spring配置信息:

<?xml version="1.0"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<bean name="confirFeedback" class="com.test.service.FeedbackManager">
		<property name="feedback" ref="feedbackService" />
	</bean>

	<bean id="confirFeedbackJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="confirFeedback" />
		<property name="targetMethod" value="doIt" />
		<property name="concurrent" value="false" />
	</bean>

	<bean id="confirFeedbackTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
		<!-- see the example of method invoking job above -->
		<property name="jobDetail" ref="confirFeedbackJob" />
		<!-- 10 seconds -->
		<property name="startDelay" value="10000" />
		<!-- repeat every 5 minutes -->
		<property name="repeatInterval" value="600000" />
	</bean>

	<bean name="autoHostDownloadService" class="com.test.service.AutoHostDownloadService" lazy-init="true">
		<property name="hostDownloadService" ref="hostDownloadService" />
		<property name="hostDownloadAlertService" ref="hostDownloadAlertService" />
		<property name="type" value="1" />
	</bean>

	<bean id="autoHostDownloadJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="autoHostDownloadService" />
		<property name="targetMethod" value="work" />
		<property name="concurrent" value="false" />
	</bean>

	<bean id="autoHostDownloadTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="autoHostDownloadJob" />

		<!-- every five minutes for test -->
		<!-- <property name="cronExpression" value="0 0/5 * * * ?" /> -->

		<!-- 9:55 AM in every day -->
		<!-- <property name="cronExpression" value="0 55 9 * * ?" /> -->

		<!-- 9:55 AM from Mondy to Friday -->
		<property name="cronExpression" value="0 55 9 ? * MON-FRI" />
		
	</bean>

	<bean id="autoHostDownloadTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="autoHostDownloadJob" />

		<!-- 15:25 AM in every day -->
		<!-- <property name="cronExpression" value="0 25 15 * * ?" /> -->

		<!-- 15:25 AM from Mondy to Friday -->
		<property name="cronExpression" value="0 25 15 ? * MON-FRI" />
	</bean>

	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="confirFeedbackTrigger" />
				<ref bean="autoHostDownloadTrigger1" />
				<ref bean="autoHostDownloadTrigger2" />
			</list>
		</property>
		<property name="waitForJobsToCompleteOnShutdown" value="true" />
	</bean>

</beans>

   其中cronExpression的表达式说明如下:

  

表达式意义 
"0 0 12 * * ?"                 每天中午12点触发 
"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点到下午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 ? * 6#3"           每月的第三个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005"       2002年至2005年的每月的最后一个星期五上午10:15触发 

 

 

   FeedBackManager代码

  

package test;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.test.service.IFeedbackService;

public class FeedbackManager {

	protected final Log log = LogFactory.getLog(this.getClass());

	private IFeedbackService feedback;

	public void doIt() {
		feedback.feedbackTest1(true);
		feedback.feedbackTest2(true);
		feedback.feedbackTest3(true);
		feedback.feedbackTest4(true);
		feedback.feedbackTest5(true);
	}

	public void setFeedback(IFeedbackService feedback) {
		this.feedback = feedback;
	}

}

 

 

 

【参考文章】

1. http://developer.51cto.com/art/200906/130436.htm

2. http://developer.51cto.com/art/200906/131888.htm

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析QuartzSpring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值