1. 简介
1.1 说明
cron表达式是一个字符串,是由空格隔开的6或7个域组成,每一个域一个含义。
每个域含义分别为(前6个必选,年为可选
):
秒 分 时 日 月 周 年
1.2 用途
- quarz框架定时任务表达式。支持6或7个域。
- spring schedule定时任务表达式。
仅支持前6个域
。
2. 字符类型及含义
2.1 每个域支持的字符类型
域 | 支持字符 | 数值有效范围 |
---|---|---|
秒 | , - * / | 0-59的整数 |
分 | , - * / | 0-59的整数 |
时 | , - * / | 0-23的整数 |
每月第几天 | , - * / ? L C W | 0-31的整数 |
月 | , - * / | 1-12的整数或JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC |
星期 | , - * / ? L C # | 1-7的整数(1表示星期天,2表示星期一)或SUN,MON,TUE,WED,THU,FRI,SAT |
年(可选) | , - * / | 1970(当前年)-2099的整数 |
2.2 字符说明
字符名称 | 字符说明 |
---|---|
, | 表示枚举值。例如,在分域使用"5,20",则表示在5分和20分各触发一次。 |
- | 表示范围。例如,在分域使用"5-20",则表示5分到20分,每分钟触发一次。 |
* | 表示匹配该域的任意值。例如。在分域使用"*",则表示每分钟都会触发一次。 |
/ | 表示起始时间开始触发,然后每隔固定时间触发一次 。例如:在分域使用5/20,表示第5分钟开始触发,每隔20分钟触发一次,即5分、25分、45分都会触发一次。 |
? | 只能在"每月第几天"和"星期"两个域使用 ,表示不指定该值 。因为"每月第几天"和"星期"两个如果都指定了值,两个域指定的值之间会出现冲突(如指定每月1号+星期一,有可能2月1号不是星期一)。所以,当两个表达式其中一个被指定了值后,为了避免冲突,需要将另一个子表达式设置为"?" 。 |
L | 只能在"每月第几天"和"星期"两个域使用 ,表示最后 。例如:如果在星期域使用1L,则表示最后一个星期天 触发。 |
W | 只能出现在每月第几天 域,表示有效工作日(周一到周五) 。系统将在离指定日期最近的工作日触发,且W的最近寻找不会跨月份 。在每月第几天 域,LW 可一起使用,代表某个月最后一个工作日 。例如:“5W”,表示距离5号最近的一个工作日(有可能是5号、4号、6号,即有可能是当天,也可能是向前取工作日,也可能是向后取工作日,但是不会跨月 ) |
C | 根据日历触发,使用较少(未找到相关明确解释,可以忽略此参数) |
# | 只能在"星期"域使用 ,表示月份中星期几第几个(即月份中第几个星期几) 。例如:1#4,表示月份中星期天第四个(即第4个星期天)。 |