研究spring不深,但最近在使用spring的過程中,發(fā)現(xiàn)它總能給人帶來(lái)點(diǎn)驚喜。
相信大家在做程序的時(shí)候應(yīng)該會(huì)碰到時(shí)序調(diào)度一類的問題,即希望在指定時(shí)刻執(zhí)行某段程序,在spring之前我的第一反應(yīng)便是在數(shù)據(jù)庫(kù)中加job。然而現(xiàn)在,Spring提供了支持時(shí)序調(diào)度的整合類Quartz,它把復(fù)雜的事情完全簡(jiǎn)單化了,在此我不想再贅敘關(guān)于spring中如何去整合Quartz,具體的spring詳細(xì)配置請(qǐng)參照http://www.jactiongroup.net/reference/html/scheduling.html。使用過程很簡(jiǎn)單,
關(guān)于Quartz的說(shuō)明參照官網(wǎng)的一段描述
What is Quartz?
Quartz is a full-featured, open source job scheduling system that can be integrated with, or used along side virtually any J2EE or J2SE application - from the smallest stand-alone application to the largest e-commerce system. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components or EJBs. The Quartz Scheduler includes many enterprise-class features, such as JTA transactions and clustering.
您也可以參考以下鏈接進(jìn)行更深入的了解http://www.opensymphony.com/quartz
在使用的過程中,需要再對(duì)cronExpression的配置解釋一下,如果沒有使用過unix的cron,這里確實(shí)有點(diǎn)讓人迷惑,我便在這里迷惑了一把。
Cron表達(dá)式是字符串,它由六個(gè)或七個(gè)子表達(dá)式組成,它描述了不同的調(diào)度細(xì)節(jié)。這些子表達(dá)式被白色表達(dá)式隔開,格式為* * * * * *
以下的表格對(duì)表達(dá)式做出了解釋
域 是否必須 允許的值 允許的字符
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W C
Month YES 1-12 or JAN-DEC, - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L C #
Year NO empty,1970-2099, - * /
比如:字符串“0 0 12 ? * WEB 意味著每周三上午12:00。
特殊字符的一些說(shuō)明:
* 表示的是所有的值,比如在秒的位置上有* 則表示為每一秒種。所以,你在表示每5分鐘執(zhí)行一次的時(shí)候便不能寫成 * 0/5 * * * ? 而應(yīng)該是0 0/5 * * * ?
? 表示沒有指定特別的值,是允許為月的某一天或者周的某一天字段的。它被用來(lái)限定"沒有限定值"。這是有用的,當(dāng)你需要限定一些事情在一個(gè)或兩個(gè)字段中,但不是這里的。
有一個(gè)特別需要主意的地方便是*與?的搭配使用。比如在Day of month與Day of week全是* ,那邊自相矛盾了。官網(wǎng)中給出的例子沒出現(xiàn)過這種情況。
- 表示范圍,比如Hours域中10-12,則表示 "the hours 10, 11 and 12".
,表示指定特別的附加值,比如"MON,WED,FRI" 在 day of week 域表示"the days Monday, Wednesday, and Friday"
/ 表示指定的增長(zhǎng)范圍。比如"0/15" 在秒的區(qū)域表示"0, 15, 30, and 45"秒。
"L"字符是允許用來(lái)月某天和周某天字段。這個(gè)字符是一個(gè)"last"的縮寫,但是它有不同的意義在兩個(gè)字段的其中之一。例如,這個(gè)值"L"在月字段的某一天意味著" 這個(gè)月的最后一天",31或者28等等。