spring結合quartz實現定時

使用quartz能很方便地實現任務調度,spring框架加入了對quartz的支持,使得在web應用中實現定時任務變得很方便。

使用之前,需要在項目中引入quartz的jar包,要注意quartz和spring版本的匹配,我使用的是quartz1.6.2,spring是2.0.7。

1. spring中涉及quartz的配置:

<!-- 配置quartz調度,指定加載哪些觸發器-->

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

    <list>

      <ref bean="sendEvaDataTrigger" />

    </list>

</property>

</bean>

 

<!-- 配置quartz的觸發器,指定該觸發器觸發的條件,以及該觸發器加載哪些job-->

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

<property name="jobDetail">

    <ref bean="sendEvaDataJobDetail" />

</property>

<!-- 59秒 59分 23時 每天 每月 不指定星期 -->

<property name="cronExpression" value="59 59 23 * * ?" />

</bean>

<!-- 配置quartz的任務,指定該任務執行哪一個bean的哪一個方法-->

<bean id="sendEvaDataJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="sendEvaDataJob" />

<property name="targetMethod" value="sendEvaDataEveryDay" />

</bean>

<!-- 配置需要定時執行的spring bean-->

<bean id="sendEvaDataJob" class="com.euvnet.ccc.common.SendEvaDataJobImpl">

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

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

</bean>

在配置時,考慮到quartz的特殊性,可以將這些配置單獨放在一個配置文件中,這樣在以後修改比較方便。

2. 注意事項

quartz有兩種方式記錄需要管理調度的job,一種是內存方式,一種是數據庫方式,如果 spring中配置的數據源id爲“dataSource”並且bean加載方式爲自動裝載,spring加載quartz時,會強制將quartz置爲 數據庫方式。解決方法一個是修改數據源id的名稱,另外一個是關閉spring對bean的加載方式(因此把quartz相關的配置寫在一個配置文件中還 是比較方便些)。

3. cronExpression格式說明

表達式: Seconds Minutes Hours Day-of-month Month Day-of-Week Year

說明:

表達式由6個或7個字符串組成,字符之間用空格分隔;前6個爲必選項,year爲可選項;

字符串的取值不區分大小寫;

允許的值和特殊字符可單獨使用或組合使用;

特殊符號:

星號(*)可以用來代表所有有效的值。譬如,月份值中的星號意味着在滿足其它制約條件後每月都觸發。

整數間的短線(-)指定一個整數範圍。譬如,1-4 意味着整數 1、2、3、4。

用逗號(,)隔開的一系列值指定一個列表。譬如,3, 4, 6, 8 標明這四個指定的整數。

正斜線(/)可以用來指定間隔頻率。在範圍後加上 / 意味着在範圍內可以跳過 integer。譬如,0-59/2 可以用來在分鐘字段定義每兩分鐘。間隔頻率值還可以和星號一起使用。例如,*/3 的值可以用在月份字段中表示每三個月觸發一次。

問號(?)表示不指定任何值,主要用於day of month 和day of week,當指定其中一個值的時候,另一個設置爲問號,避免前後不一致。

L表示最後一天, 主要用於day of month 和day of week,每月的最後一天,每週的最後一天,用於day of month 時只能單獨使用,用於day of week時可以組合使用,例如6L, 表示指定月的最後一個星期五.

W用於day of month, 表示離指定日期最近的工作日(週一至週五), 例如6W,如果這個月的第6天爲週六,則表示週五(這個月的第5天);如果第6天爲週日,則表示週一(這個月的第7天);如果第6天爲工作日,則爲當日; 如果按正常推算的日期爲上月或下月,則在本月內查找最近的工作日;

LW組合使用表示這個月的最後一個工作日;

#用於day of week, #號後面跟數字n表示本月的第n個X., 例如6#3 表示指定月的第三個星期五;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章