以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=http://www.cnblogs.com/litu/archive/2012/06/14/"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>