定时任务,corn表达式
什么是corn表达式
- 对于开发人员来说,在做项目的过程中或多或少都会用到定时任务,Java开发一般会用Spring Quartz、xxl-job、Elastic-job来做定时任务调度框架。不论使用哪种框架,定时任务表达式都是必不可少的。
- Cron 表达式是一种用于指定定时任务执行时间的字符串表达式。它由 6 个字段组成,从左到右依次为"秒 分 时 日 月 星期 年" ,其中年不是必须的的。每个字段都可以使用特定的符号来指定时间范围或间隔。
cron表达式的组成
表达式结构
- cron表达式是一个字符串,由6到7个字段组成,从左到右依次为"秒 分 时 日 月 星期 年" ,其中年不是必须的的。每个字段的含义如图所示:
表达式值域
域 | 字段 | 取值 | 特殊字符 | 必须? |
---|---|---|---|---|
秒 | Seconds | 0-59 | , - * / | 是 |
分 | Minutes | 0-59 | , - * / | 是 |
时 | Hours | 0-23 | , - * / | 是 |
日 | Day of Month | 1-31 | , - * / ? L W | 是 |
月 | Month | 1-12/JAN-DEC | , - * / | 是 |
星期几 | Day of Week | 1-7/SUN-SAT | , - * / ? L # | 是 |
年 | Year | 1970-2099 | , - * / | 否 |
特殊字符
特殊字符 | 描述 |
---|---|
* | 表示匹配该域的任意值。比如Minutes域使用*,就表示每分钟都会触发 |
- | 表示范围。比如Minutes域使用 10-20,就表示从10分钟到20分钟每分钟都会触发一次 |
, | 表示列出枚举值。比如Minutes域使用1,3,就表示1分钟和3分钟都会触发一次 |
/ | 表示间隔时间触发(开始时间/时间间隔)。例如在Minutes域使用 5/10,就表示从第5分钟开始,每隔10分钟触发一次 |
? | 表示不指定值。简单理解就是忽略该字段的值,直接根据另一个字段的值触发执行 |
# | 表示该月第n个星期x(x#n),仅用星期域。如:星期:6#3,表示该月的第三个星期五 |
L | 表示最后,是单词"last"的缩写,仅出现在日和星期的域中。用在日则表示该月的最后一天,用在星期则表示该月的最后一个星期。如:星期域上的值为5L,则表示该月最后一个星期的星期四。在使用'L'时,不要指定列表','或范围'-',否则易导致出现意料之外的结果 |
W | 仅用在日的域中,表示距离当月给定日期最近的工作日(周一到周五),是单词"weekday"的缩写 |
实际使用
常用举例
每隔10秒执行一次
*/10 * * * * ?
每隔5分钟执行一次
0 */5 * * * ?
在2分、22分、32分执行一次
0 2,22,32 * * * ?
每天4-8点整点执行一次
0 0 4-8 * * ?
每天凌晨2点执行一次
0 0 2 * * ?
每月1号凌晨2点执行一次
0 0 2 1 * ?
在线生成器
- 现在也有许多在线的cron表达式生成器:
在线Cron表达式生成器
Cron在线表达式生成器
参考:
定时任务的cron表达式