什么是Cron表达式

421 阅读4分钟

Cron表达式是一种用于调度任务的时间表达式,广泛应用于各种计划任务、定时任务等场景。

1. Cron表达式语法

Cron表达式由6个字段,分别表示秒、分、时、日、月、周几。这些字段按顺序排列,用空格分隔。

下面是一个Cron表达式的示例:

0 0 12 * * ? 这个表达式的含义是,在每天的中午12点触发。

接下来,我们逐个字段地解释一下这个表达式的含义。

1.1. 秒(Seconds)

秒字段表示每分钟的哪些秒钟执行任务,取值范围为0-59。例如,如果想让任务在每分钟的第30秒执行,可以将秒字段设置为30:

30 * * * * ?

1.2. 分钟(Minutes)

分钟字段表示每小时的哪些分钟执行任务,取值范围为0-59。例如,如果想让任务在每小时的第30分钟执行,可以将分钟字段设置为30:

0 30 * * * ?

1.3. 小时(Hours)

小时字段表示每天的哪些小时执行任务,取值范围为0-23。例如,如果想让任务在每天的中午12点执行,可以将小时字段设置为12:

0 0 12 * * ?

1.4. 日(Day of month)

日字段表示每月的哪些日执行任务,取值范围为1-31。例如,如果想让任务在每月的第一天执行,可以将日字段设置为1:

0 0 0 1 * ?

1.5. 月(Month)

月字段表示每年的哪些月份执行任务,取值范围为1-12。例如,如果想让任务在每年的1月执行,可以将月字段设置为1:

0 0 0 1 1 ?

1.6. 周几(Day of week)

周几字段表示每周的哪些天执行任务,取值范围为0-7,其中

1:周日 2:周一 3:周二 4:周三 5:周四 6:周五 7:周六 。例如,如果想让任务在每周的周一执行,可以将周几字段设置为2:

0 0 0 * * 2 除了单独指定数字之外,Cron表达式还支持一些特殊字符和符号,用于更灵活地指定任务的执行时间。

2. 特殊字符和符号

2.1. 星号(*)

星号表示匹配所有可能的值,例如,如果想让任务每分钟执行一次,可以将Cron表达式设置为:

*****?

2.2. 问号(?)

问号只能用于日和周几字段,表示不指定值。例如,如果想让任务在每月的第一天执行,但不关心它是周几,可以将Cron表达式设置为:

0 0 0 1 * ?

2.3. 斜杠(/)

斜杠用于指定某个字段的间隔值,例如,如果想让任务每隔5分钟执行一次,可以将Cron表达式设置为:

0 */5 * * * ?

2.4. 连接符(-)

连接符用于指定某个字段的取值范围,例如,如果想让任务在每周的周一到周五执行,可以将Cron表达式设置为:

0 0 0 ? * 2-6

2.5. 逗号(,)

逗号用于指定某个字段的多个取值,例如,如果想让任务在每月的1日和15日执行,可以将Cron表达式设置为:

0 0 0 1,15 * ?

2.6. L

L用于指定某个字段的最后一个取值,例如,如果想让任务在每月的最后一天执行,可以将Cron表达式设置为:

0 0 0 L * ?

2.7. W

W用于指定离指定日期最近的工作日,例如,如果想让任务在每月的最后一个工作日执行,可以将Cron表达式设置为:

0 0 0 LW * ?

2.8 #

用于指定某个月份的第几个星期几,例如,如果想让任务在每月的第2个周四执 行,可以将Cron表达式设置为:

0 0 0 ? * 5#2

3. Cron表达式示例

下面是一些常用的Cron表达式示例,供读者参考:

3.1. 每天凌晨1点执行

0 0 1 * * ?

3.2. 每小时的第30分钟执行

0 30 * * * ?

3.3. 每周一的上午10点执行

0 0 10 ? * 2

3.4. 每月的第一天的凌晨执行

0 0 0 1 * ?

3.5. 每年的1月1日凌晨执行

0 0 0 1 1 ?

补充:

Cron表达式的最小时间单位是分钟,因此无法使用Cron表达式来表示每秒钟执行一次的定时任务。如果您需要实现每秒钟执行一次的定时任务,

一颗有趣的栗子:

30 1 * * * 和 0 30 1 * * 这两个 Cron 表达式的区别是:

30 1 * * * 表示每天的 1 点 30 分执行任务,秒数可以是任意值。

0 30 1 * * 表示每天的 1 点 30 分 0 秒执行任务。

也就是说,第一个 Cron 表达式的秒数可以是任意值,执行时间可以在 1 点 30 分和 1 点 31 分之间的任意一秒钟,而第二个 Cron 表达式的秒数必须为 0,只能在 1 点 30 分 0 秒执行任务。

参考

cron定时