Spring定時器配置

在Spring中有兩種流行配置:Java的Timer 和OpenSymphony的Quartz


1.Java Timer定時
首先繼承java.util.TimerTask類實現run方法


在Spring定義,並配置定時器


timerTask屬性告訴ScheduledTimerTask運行哪個。86400000代表24個小時
啓動定時器
Spring的TimerFactoryBean負責啓動定時任務


scheduledTimerTasks裏顯示一個需要啓動的定時器任務的列表。
可以通過設置delay屬性延遲啓動


這個任務我們只能規定每隔24小時運行一次,無法精確到某時啓動
2.Quartz定時器
首先繼承QuartzJobBean類實現executeInternal方法



在Spring中定義


在這裏我們並沒有直接聲明一個EmailReportJob Bean,而是聲明瞭一個JobDetailBean。這個是Quartz的特點。JobDetailBean是Quartz的 org.quartz.JobDetail的子類,它要求通過jobClass屬性來設置一個Job對象。
使用Quartz的JobDetail中的另一個特別之處是EmailReportJob的courseService屬性是間接設置的。 JobDetail的jobDataAsMap屬性接受一個Map,包括設置給jobClass的各種屬性,當。JobDetailBean實例化時,它 會將courseService Bean注入到EmailReportJob 的courseService 屬性中。
啓動定時器
Quartz的org.quartz.Trigger類描述了何時及以怎樣的頻度運行一個Quartz工作。Spring提供了兩個觸發器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean與scheduledTimerTasks類似。指定工作的執行頻度,模仿scheduledTimerTasks配置



startDelay也是延遲1個小時啓動
CronTriggerBean指定工作的準確運行時間


屬性cronExpression告訴何時觸發。最神祕就是cron表達式:
Linux系統的計劃任務通常有cron來承擔。一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。從左到右:
1. 2. 3.小時 4.月份中的日期(1-31) 5.月份(1-12或JAN-DEC) 6.星期中的日期(1-7或SUN-SAT) 7.年份(1970-2099)

每個元素都顯示的規定一個值(如6),一個區間(9-12),一個列表(9,11,13)或一個通配符(*)。因爲4和6這兩個元素是互斥的,因此應該通過設置一個問號(?)來表明不想設置的那個字段,“/”如果值組合就表示重複次數(10/6表示每10秒重複6次)。
格式參考如下:


0 0 10,14,16 * * ?                   每天上午10點,下午2點和下午4點
0 0,15,30,45 * 1-10 * ?           每月前10天每隔15分鐘
30 0 0 1 1 ? 2012                     在2012年1月1日午夜過30秒時
0 0 8-5 ? * MON-FRI                 每個工作日的工作時間


啓動定時器


triggers屬性接受一組觸發器。


-----------------------------------------------另一方法配置------------------------- --------------------




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