cron是Unix/Linux系统工具,有很强的任务调度能力,Quartz的CronTrigger触发器就是建立在cron的基础上.
一个cron Expression(克龙表达式)是由6或7个字段以空格分隔的字符串,每个字段包含一些允许的值或允许的特殊字符(具体见下表),
字段 | 必要 | 容许值 | 容许的特殊字符 |
Seconds(秒) | 是 | 0-59 | -*/ |
Minutes(分) | 是 | 0-59 | -*/ |
Hours(时) | 是 | 0-23 | -*/ |
Day of month(日) | 是 | 1-31 | -*?/LW |
Month(月) | 是 | 1-12或JAN-DEC | -*/ |
Day of week(星期) |
是 | 1-7或SUN-SAT | -*?/L# |
Year(年) | 否 | 空值,1970-2099 | -*/ |
*:所有值,用来选择某个字段的所有的值,例如'*'用在分钟字段上,意味着每一分钟(包含0-59所有值)
?:没有具体的值,举例说明,在每月的10号出发任务,在Day of month(日)字段上设置值为10,但是我不关心那一天星期几,那么在Day of week(星期)字段上设置'?'.
-:用来标识一个范围,例如在Hours(时)字段上设置'10-12',意味着在10点,11点和12点.
,:用来标识附加的值,例如在Hours(时)字段上设置'10,12,14',意味着在10点,12点和14点.
/:用来标识值的递增,例如在Seconds(秒)字段上设置'0/15',意味着在第0秒,第15秒,第30面,第45秒.'/'左边为初始值,右边为递增值.
L:在日期和星期字段中,L有不同的含义,在日期字段中L标识月的最后一天,在星期字段中标识星期的最后一天(7或者SAT),另外,在星期字段中,L放置在一个数值后,后其他含义,比如'6L',意味着一个月中最后一个星期五.在日期字段中'L'可以用来标识最后一天的一个偏移量,例如'L-3',标识一个月的倒数第三天.(注意,这个时候'-'字符标识的不是一个范围).
W:可以理解为工作日,使用在日期字段中,标识给定日期中,最近的工作日(星期-到星期五)触发.比如'15W',如果15号是星期六,则在14号(星期五)触发,如果15号是星期天,则在16号(星期一)触发.如果15号是星期二,则在15号星期二触发.如果你指定'1W',1号是星期六,那么将在3号星期1触发(是不会跨月找工作日的);'W'字符标识的是指定的一天,不能标识一个范围.'W'和'L'字符结合使用,像这样'LW',标识一个月中最后一个工作日.
#:用在星期字段,标识一个月中第几个星期几,例如'6#3'标识一个月中第3个星期五,'2#1'标识一个月中第一个星期一,'4#5'标识一个月中第5个星期3(等等,一个月中有可能有第5个星期三吗,永远不会,所以,这个是永远也不会触发的).
另外合法的字符,是不区分大小写的,MON和mon是一样的.
介绍内容来自Quartz的官方文档.