天天看點

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,用它們來共同完成這項任務。

繼續閱讀