天天看點

Spring Quartz定時器的配置

Spring中Quartz的配置

各種企業應用幾乎都會碰到任務排程的需求,就拿論壇來說:每隔半個小時生成精華文章的RSS檔案, 每天淩晨統計論壇使用者的積分排名,每隔30分鐘執行鎖定使用者解鎖任務。對于一個典型的MIS系統來說,在每月1号淩晨統計上個月各部門的業務資料生成月報 表,每半個小時查詢使用者是否已經有快到期的待處理業務……,這樣的例子俯拾皆是,不勝枚舉。

Quartz 在開源任務排程架構中的翹首,它提供了強大任務排程機制,難能可貴的是它同時保持了使用的簡單性。Quartz 允許開發人員靈活地定義觸發器的排程時間表,并可以對觸發器和任務進行關聯映射。 Spring 為建立Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean類,以便能夠在Spring 容器中享受注入的好處。此外Spring還提供了一些便利工具類直接将Spring中的Bean包裝成合法的任務。Spring進一步降低了使用 Quartz的難度,能以更具Spring風格的方式使用Quartz。概括來說它提供了兩方面的支援: 1)為Quartz的重要元件類提供更具Bean風格的擴充類; 2)提供建立Scheduler的BeanFactory類,友善在Spring環境下建立對應的元件對象,并結合Spring容器生命周期進行啟動和停止的動作。

Quartz是一個強大的企業級任務排程架構,Spring中繼承并簡化了Quartz

實作

1.導入jar檔案。

spring.jar

quartz-all-1.6.6.jar

2.編寫被調用的類。

第一步:extends QuartzJobBean。

第二步:@Override executeInternal。

Spring Quartz定時器的配置

3.配置定時器

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

       <!-- Spring 定時器 -->

       <bean name="userTimelineQuartz" class="org.springframework.scheduling.quartz.JobDetailBean">

       <property name="jobClass">

           <value>com.zc.weibo.quartz.timeline.TestQuartz</value>

       </property>

       </bean>

       <!-- 秒 分 時 日 月 年 -->

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

       <property name="jobDetail" ref="userTimelineQuartz"/>

       <property name="cronExpression" value="0 0/1 * * * ?"/>

       </bean>

       <!-- Spring觸發工廠 -->

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

       <property name="triggers">

           <list>

               <ref local="cronTrigger"/>

           </list>

       </property>

       </bean>

</beans>

4. cron表達式。

例如:

<!-- 秒 分 時 日 月 年 -->

<property name="cronExpression" value="0 0/5 * * * ?"/>

這裡的意思是每個5分鐘排程一次。

Cron 表達式包括以下 7 個字段:

· 秒

· 分

· 小時

· 月内日期

· 月

· 周内日期

· 年(可選字段)

特殊字元

Cron 觸發器利用一系列特殊字元,如下所示:

· 反斜線(/)字元表示增量值。例如,在秒字段中“5/15”代表從第 5 秒開始,每 15 秒一次。

· 問 号(?)字元和字母 L 字元隻有在月内日期和周内日期字段中可用。問号表示這個字段不包含具體值。是以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值無關 緊要。字母 L 字元是 last 的縮寫。放在月内日期字段中,表示安排在當月最後一天執行。在周内日期字段中,如果“L”單獨存在,就等于“7”,否則代表當月内周内日期的最後一個實 例。是以“0L”表示安排在當月的最後一個星期日執行。

· 在月内日期字段中的字母(W)字元把執行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把執行安排在當月的第一個工作日内。

· 井号(#)字元為給定月份指定具體的工作日執行個體。把“MON#2”放在周内日期字段中,表示把任務安排在當月的第二個星期一。

· 星号(*)字元是通配字元,表示該字段可以接受任何可能的值。

字段 允許值 允許的特殊字元 秒 0-59 , - * / 分 0-59 , - * / 小時 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可選) 留白, 1970-2099 , - * /

表達式意義 

"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 * * * ?" 每5分鐘觸發 "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 ? * 6L 2002-2005" 2002年至2005年的每月的最後一個星期五上午10:15觸發 "0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發

更多知識: http://www.ibm.com/developerworks/cn/java/j-quartz/index.html

http://www.javaeye.com/topic/117244