More About CronTrigger (extends 更多關於CronTrigger)

原文鏈接:http://www.blogjava.net/javaora/archive/2005/07/20/8046.aspx

More About CronTrigger
更多關於CronTrigger

CronTriggers are often more useful than SimpleTrigger, if you need a job-firing schedule that recurs based on calendar-like notions, rather than on the exactly specified intervals of SimpleTrigger.
CronTriggers 比SimpleTrigger經常更加有用,如果你需要一個基於像日曆概念的重複 job-firing 調度,而不是在一個SimpleTrigger特定的間隔。

With CronTrigger, you can specify firing-schedules such as "every Friday at noon", or "every weekday and 9:30 am", or even "every 5 minutes between 9:00 am and 10:00 am on every Monday, Wednesday and Friday".
使用CronTrigger,你可以限定firing-schedulers例如 “每天中午“,或者”,”每天週日上午9:30“,或者甚至 “每5分鐘在上午9:00 到 10:00 每週一、週三、週五”

Cron Expressions
Cron 表達式

Cron-Expressions are used to configure instances of CronTrigger. Cron-Expressions are strings that are actually made up of six sub-expressions, that describe individual details of the schedule. These sub-expression are separated with white-space, and represent:
Cron 表達式被用來註冊CronTrigger實例的。Cron表達式是字符串,它由六個子表達式組成,它描述了不同的調度細節。這些子表達式被白色表達式隔開,表現:

Seconds  秒
Minutes  分
Hours    時
Day-of-Month  日
Month         月
Day-of-Week   周

An example of a complete cron-expression is the string "0 0 12 ? * WED" - which means "every Wednesday at 12:00 pm".
一個完整的Cron 表達式例子是字符串“0 0 12 ? * WEB” 意味着每週三上午12:00。

Individual sub-expressions can contain ranges and/or lists. For example, the day of week field in the previous (which reads "WED") example could be replaces with "MON-FRI", "MON, WED, FRI", or even "MON-WED,SAT".
單獨的子表達式可以包含平行的 和/或。例如,在上一個例子一週的一天字段(它讀作"WED")可以被“MON-FRI”,"MON,WED,FRI",或者甚至"MON-WED,SAT"替換掉。

Wild-cards (the '*' character) can be used to say "every" possible value of this field. Therefore the '*' character in the "Month" field of the previous example simply means "every month". A '*' in the Day-Of-Week field would obviously mean "every day of the week".
統配符("*"字符)可以被用來作爲這個字段的"每一個"可能值。所以,在上一個例子月字段中的"*"字符表示每個月。 一個"*"在周天將明顯意味着周的每一天。

All of the fields have a set of valid values that can be specified. These values should be fairly obvious - such as the numbers 0 to 59 for seconds and minutes, and the values 0 to 23 for hours. Day-of-Month can be any value 0-31, but you need to be careful about how many days are in a given month! Months can be specified as values between 0 and 11, or by using the strings JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC. Days-of-Week can be specified as vaules between 1 and 7 (1 = Sunday) or by using the strings SUN, MON, TUE, WED, THU, FRI and SAT.
所有字段都用一個合法限定的值。這些值應該是明顯的,例如0到59數字爲秒和分的限定,0到23爲小時。月的某天可以是0-31的,或者你需要消息給個月有多少天!月份可以被限定在0到11,或者,使用英文字符串縮寫。一個禮拜的一天可以被限定作爲1到7(1=Sunnday)或者使用英文字符串。


The '/' character can be used to specify increments to values. For example, if you put '0/15' in the Minutes field, it means 'every 15 minutes, starting at minute zero'. If you used '3/20' in the Minutes field, it would mean 'every 20 minutes during the hour, starting at minute three' - or in other words it is the same as specifying '3,23,43' in the Minutes field.
"/"字符可以內用來限定值的增加。例如,如果你將'0/15'放到分鐘字段,它意味着"每15分鐘,開始於0分鐘"。如果你使用"3/20"在分鐘字段中,你將意味着"一個小時內每20分鐘,開始於3分鐘"---  或者換言之,它和在分鐘字段"3,23,43"限定是一樣的。


The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify "no specific value". This is useful when you need to specify something in one of the two fields, but not the other. See the examples below (and CronTrigger JavaDOC) for clarification.

"?"字符是允許爲月的某一天或者周的某一天字段的。它被用來限定"沒有限定值"。這是有用的,當你需要限定一些事情在一個或兩個字段中,但不是這裏的。

The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" or "FRIL" both mean "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results.

"L"字符是允許用來月某天和周某天字段。這個字符是一個"last"的縮寫,但是它有不同的意義在兩個字段的其中之一。例如,這個值"L"在月字段的某一天意味着" 這個月的最後一天",31或者28等等。

Here are a few more examples of expressions and their meanings - you can find even more in the JavaDOC for CronTrigger

下面有些例子,可以在JavaDoc裏查詢CronTigger更詳細的內容。

CronTrigger Example 1 - an expression to create a trigger that simply fires every 5 minutes

每5分鐘

  "0 0/5 * * * ?"

CronTrigger Example 2 - an expression to create a trigger that fires every 5 minutes, at 10 seconds after the minute (i.e. 10:00:10 am, 10:05:10 am, etc.).

每5分10秒

  "10 0/5 * * * ?"

CronTrigger Example 3 - an expression to create a trigger that fires at 10:30, 11:30, 12:30, and 13:30, on every Wednesday and Friday.

每週三和週五的10:30,11:30,12:30,13:30

  "0 30 10-13 ? * WED,FRI"

CronTrigger Example 4 - an expression to create a trigger that fires every half hour between the hours of 8 am and 10 am on the 5th and 20th of every month. Note that the trigger will NOT fire at 10:00 am, just at 8:00, 8:30, 9:00 and 9:30

在每月的第5天和第20天的8點至9點中,每隔30分鐘(即8:00,8:30,9:00,9:30)。注意:不包括10:00。

  "0 0/30 8-9 5,20 * ?"

Note that some scheduling requirements are too complicated to express with a single trigger - such as "every 5 minutes between 9:00 am and 10:00 am, and every 20 minutes between 1:00 pm and 10:00 pm". The solution in this scenario is to simply create two triggers, and register both of them to run the same job.

有些計劃任務對於一個Tirgger來說太過複雜,例如“9:00至10:00中每5分鐘,且每1:00pm至10:00pm中每20分鐘”,解決辦法是創建兩個Trigger,用它們來共同完成這項任務。

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