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