您的位置:首页 > 编程语言 > Java开发

简单介绍Spring+Quartz实现定时任务的配置方法

2012-06-14 15:42 471 查看
Quartz是一个任务进度管理器,可以与任何其他软件系统集成或者一起使用。是用一个小Java库发布的文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。

以top调用错误统计定时发送邮件任务为例介绍Quartz定时任务的Spring依赖注入配置方法:

1.定时目标类TaoReportTask的bean配置(详见eshop/eshop/src/bean/spring-app-task.xml)。

<bean id="taoReportTask" class="com.alibaba.eshop.task.tool.task.TaoReportTask">

<property name="taskHost">

<!—执行任务的服务器的ip -->

<value>${task.taoreport.ip}</value>

</property>

<property name="manager">

<ref bean="manager"/>

</property>

<property name="mailSender" ref="mailSender" />

</bean>

2.Scheduler的配置(详见eshop/neweshop/src/spring/spring-task-quartz.xml),Scheduler包含一个Trigger列表,每个Trigger表示一个作业。

<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"autowire="no">

<property name="triggers">

<list>

<!-- 淘宝错误统计作业-->

<ref bean="doTaoReportTrigger"></ref>

</list>

</property>

<property name="configLocation" value="classpath:quartz.properties"/>

</bean>

3.Trigger的配置(详见eshop/eshop/src/bean/spring-app-task.xml)。

<bean id="doTaoReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail">

<ref bean="doTaoReportJobDetail"/>

</property>

<property name="cronExpression">

<!—Cron表达式,表示每天凌晨执行一次任务 -->

<value> 0 0 0 * * ?</value>

</property>

</bean>

说明:

1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

字段名 允许的值 允许的特殊字符

秒 0-59 , - * /

分 0-59 , - * /

小时 0-23 , - * /

日 1-31 , - * ? / L W C

月 1-12 or JAN-DEC , - * /

周几 1-7 or SUN-SAT , - * ? / L C #

年 (可选字段) empty, 1970-2099 , - * /

“?”字符:表示不确定的值

“,”字符:指定数个值

“-”字符:指定一个值的范围

“/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

“W”字符:指定离给定日期最近的工作日(周一到周五)

“#”字符:表示该月第几个周X。6#3表示该月第3个周五

2)Cron表达式范例:

每隔5秒执行一次:*/5 * * * * ?

每隔1分钟执行一次:0 */1 * * * ?

每天23点执行一次:0 0 23 * * ?

每天凌晨1点执行一次:0 0 1 * * ?

每月1号凌晨1点执行一次:0 0 1 1 * ?

每月最后一天23点执行一次:0 0 23 L * ?

每周星期天凌晨1点实行一次:0 0 1 ? * L

在26分、29分、33分执行一次:0 26,29,33 * * * ?

每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

4. JobDetail配置(详见eshop/eshop/src/bean/spring-app-task.xml),其中C2CMethodInvokingJobDetailFactoryBean 继承了spring中的

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean。

<bean id="doTaoReportJobDetail"

class="com.alisoft.c2c.aop.C2CMethodInvokingJobDetailFactoryBean">

<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->

<property name="concurrent">

<value>false</value>

</property>

<!—任务目标类 -->

<property name="targetObject">

<ref bean="taoReportTask" />

</property>

<!—任务目标类要调用的方法-->

<property name="targetMethod">

<value>doTopReport</value>

</property>

</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: