定義一個任務是很簡單的實現TimerTask的run方法就可以了. 如下: SayHelloTask.java ??1 ![]() ?2 ![]() ?3 ![]() ?4 ![]() ?5 ![]() ![]() ![]() ?6 ![]() ?7 ![]() ?8 ![]() ![]() ![]() ?9 ![]() 10 ![]() 11 ![]() 12 ![]() 13 ![]() ?1 ![]() ?2 ![]() ?3 ![]() ?4 ![]() ?5 ![]() ![]() ![]() ?6 ![]() ![]() ![]() ?7 ![]() ?8 ![]() ?9 ![]() 10 ![]() 11 ![]() 12 ![]() 13 ![]() 然后是配置文件: 測試類如下: TestApp.java ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 運行結果: task2 is running task2 is running haha,task is running haha,task is running task2 is running 使用Java中的定時器比較簡單,其提供的任務也比較簡單, 下面來看看使用quartz來執行一個復雜的任務. ?1 ![]() ?2 ![]() ?3 ![]() ?4 ![]() ?5 ![]() ?6 ![]() ?7 ![]() ![]() ![]() ?8 ![]() ?9 ![]() 10 ![]() 11 ![]() ![]() ![]() 12 ![]() 13 ![]() 14 ![]() 15 ![]() 16 ![]() 17 ![]() 關于簡單觸發器和復雜觸發器,查考下面的解釋: Quartz設計者做了一個設計選擇來從調度分離開作業。Quartz中的觸發器用來告訴調度程序作業什么時候觸發。框架提供了一把觸發器類型,但兩個最常用的是SimpleTrigger和CronTrigger。SimpleTrigger為需要簡單打火調度而設計。典型地,如果你需要在給定的時間和重復次數或者兩次打火之間等待的秒數打火一個作業,那么SimpleTrigger適合你。另一方面,如果你有許多復雜的作業調度,那么或許需要CronTrigger。 CronTrigger是基于Calendar-like調度的。當你需要在除星期六和星期天外的每天上午10點半執行作業時,那么應該使用CronTrigger。正如它的名字所暗示的那樣,CronTrigger是基于Unix克隆表達式的。 作為一個例子,下面的Quartz克隆表達式將在星期一到星期五的每天上午10點15分執行一個作業。 0 15 10 ? * MON-FRI 下面的表達式 0 15 10 ? * 6L 2002-2005 將在2002年到2005年的每個月的最后一個星期五上午10點15分執行作業。 你不可能用SimpleTrigger來做這些事情。你可以用兩者之中的任何一個,但哪個跟合適則取決于你的調度需要。 更多詳細介紹參考此處: 關于cronExpression的介紹:
如上面的表達式所示: “*”字符被用來指定所有的值。如:”*“在分鐘的字段域里表示“每分鐘”。 “-”字符被用來指定一個范圍。如:“10-12”在小時域意味著“10點、11點、12點”。 ? “,”字符被用來指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”. “?”字符只在日期域和星期域中使用。它被用來指定“非明確的值”。當你需要通過在這兩個域中的一個來指定一些東西的時候,它是有用的。看下面的例子你就會明白。 “L”字符指定在月或者星期中的某天(最后一天)。即“Last ”的縮寫。但是在星期和月中“L”表示不同的意思,如:在月子段中“L”指月份的最后一天-1月31日,2月28日,如果在星期字段中則簡單的表示為“7”或者“SAT”。如果在星期字段中在某個value值得后面,則表示“某月的最后一個星期value”,如“6L”表示某月的最后一個星期五。 “W”字符只能用在月份字段中,該字段指定了離指定日期最近的那個星期日。 “#”字符只能用在星期字段,該字段指定了第幾個星期value在某月中
0 6 * * *? 每兩個小時 0 */2 * * * 晚上11點到早上8點之間每兩個小時,早上八點 0 23-7/2,8 * * * 每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * 1-3 1月1日早上4點 0 4 1 1 *
??? 而在Spring里,已經很好的集成了Quartz,簡單到像配cron一樣,在xml文件里面配一下時間就可以自動執行,不需要寫一行代碼。Spring對Quartz大刀闊斧的簡化堪稱范例,Quartz項目組也許可以學習一下。 ??? <bean id="methodInvokingJobDetail"
??? <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 上面這段配置文件規定了在早上6點和晚上8點執行financeDAO對象的confirmOrder()方法. |