[corn]定时任务_corn表达式

定时任务,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表达式