研究spring不深,但最近在使用spring的過程中,發現它總能給人帶來點驚喜。
相信大家在做程序的時候應該會碰到時序調度一類的問題,即希望在指定時刻執行某段程序,在spring之前我的第一反應便是在數據庫中加job。然而現在,Spring提供了支持時序調度的整合類Quartz,它把復雜的事情完全簡單化了,在此我不想再贅敘關于spring中如何去整合Quartz,具體的spring詳細配置請參照http://www.jactiongroup.net/reference/html/scheduling.html。使用過程很簡單,
關于Quartz的說明參照官網的一段描述
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.
您也可以參考以下鏈接進行更深入的了解http://www.opensymphony.com/quartz
在使用的過程中,需要再對cronExpression的配置解釋一下,如果沒有使用過unix的cron,這里確實有點讓人迷惑,我便在這里迷惑了一把。
Cron表達式是字符串,它由六個或七個子表達式組成,它描述了不同的調度細節。這些子表達式被白色表達式隔開,格式為* * * * * *
以下的表格對表達式做出了解釋
域 是否必須 允許的值 允許的字符
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。
特殊字符的一些說明:
* 表示的是所有的值,比如在秒的位置上有* 則表示為每一秒種。所以,你在表示每5分鐘執行一次的時候便不能寫成 * 0/5 * * * ? 而應該是0 0/5 * * * ?
? 表示沒有指定特別的值,是允許為月的某一天或者周的某一天字段的。它被用來限定"沒有限定值"。這是有用的,當你需要限定一些事情在一個或兩個字段中,但不是這里的。
有一個特別需要主意的地方便是*與?的搭配使用。比如在Day of month與Day of week全是* ,那邊自相矛盾了。官網中給出的例子沒出現過這種情況。
- 表示范圍,比如Hours域中10-12,則表示 "the hours 10, 11 and 12".
,表示指定特別的附加值,比如"MON,WED,FRI" 在 day of week 域表示"the days Monday, Wednesday, and Friday"
/ 表示指定的增長范圍。比如"0/15" 在秒的區域表示"0, 15, 30, and 45"秒。
"L"字符是允許用來月某天和周某天字段。這個字符是一個"last"的縮寫,但是它有不同的意義在兩個字段的其中之一。例如,這個值"L"在月字段的某一天意味著" 這個月的最后一天",31或者28等等。