cron表达式
一个完整cron表达式如下:
{秒} {分钟} {时} {日} {月} {星期} {年}
单位 | 取值范围 | 允许的通配符 | 是否必填 |
---|
秒 | 0~59 | [, - * /] | 是 |
分钟 | 0~59 | [, - * /] | 是 |
小时 | 0~23 | [, - * /] | 是 |
日 | 1~31 | [, - * / ? L W] | 是 |
月 | 1~12 或 JAN-DEC | [, - * /] | 是 |
星期 | 1~7(星期日为1)或 SUN-SAT | [, - * / ? L #] | 是 |
年 | 不限 | [, - * /] | 否 |
表达式含义
,
:在指定字段单位中选择触发定时任务的时间点,如在单位"秒"上写 0,1,3
,代表在0、1、3秒都会触发定时任务。
-
:在指定字段单位中选择触发定时任务的范围时间,如在单位"秒"上写2-20
,代表在2-20秒钟,每秒都会触发一次定时任务。
*
:代表每次指定字段单位时间过后都会触发,如:在单位"秒"上写*
,代表每秒都会触发一次定时任务。
/
:从指定时间开始,每过指定的单位时间都会触发一次,如:在单位"秒"上写20/10
,代表从20秒开始,每隔十秒都会执行一次定时任务
?
:代表放弃的意思,只能"日"和"星期"使用,必须有一个使用,不能两个字段一起使用,因为"日"和"星期"会有冲突现象,要么设置"星期",要么设置"日"
错误示例:
30 15 23 6 * *
这个表达式是错误的。从表达式上看,代表的是每年的每月的6号每个星期几的23点15分30秒都会执行一次。
"6号"和"每个星期几"冲突了,具体的星期几已经能够确定是当月的哪天了,如:每个月的每个星期一执行一次定时任务

这里拿2020年的6月举例,很明显当月的每个星期一对应的就是6月1号、6月8号、6月15号、6月22号、6月29号。
因此在选择星期和日期字段时,必须有一方要放弃。
正确示例:
30 15 23 6 * ?
放弃星期字段,代表每年的每月的6号的23点15分30秒都会执行一次。(没指定"年"字段默认为*
)
最近10次触发时间(我当前时间为2020-04-22 ):
2020-05-06 23:15:30
2020-06-06 23:15:30
2020-07-06 23:15:30
2020-08-06 23:15:30
2020-09-06 23:15:30
2020-10-06 23:15:30
2020-11-06 23:15:30
2020-12-06 23:15:30
2021-01-06 23:15:30
2021-02-06 23:15:30
正确示例二:
30 15 23 ? * 2
**放弃日期字段,**代表每年的每月的每个星期1(3为星期2,2为星期1,1为星期日,以此类推)的23点15分30秒都会执行一次
最近10次触发时间(我当前时间为2020-04-22 ):
2020-04-27 23:15:30
2020-05-04 23:15:30
2020-05-11 23:15:30
2020-05-18 23:15:30
2020-05-25 23:15:30
2020-06-01 23:15:30
2020-06-08 23:15:30
2020-06-15 23:15:30
2020-06-22 23:15:30
2020-06-29 23:15:30
L
:只能在字段"日"和"星期"使用,表示最后的意思(Last),在"日"字段使用,代表这个月的最后一天触发定时任务,在"星期"字段使用,代表这个星期的最后一天触发定时任务
示例:
* * 8 L * ?
表示每年的每个月的最后一天的8点的每分每秒都会执行一次。
W
:只在"日"字段上生效,代表离此次日期最近的工作日(周一到周五),例如:2W
代表2号最近的工作日
示例:
* * 8 2W * ?
查看日历:

最近10次执行时间:
2020-05-01 08:01:01
2020-06-02 08:01:01
2020-07-02 08:01:01
2020-08-03 08:01:01
2020-09-02 08:01:01
2020-10-02 08:01:01
2020-11-02 08:01:01
2020-12-02 08:01:01
2021-01-01 08:01:01
2021-02-02 08:01:01
#
:**只能出现在星期"字段",**格式为{星期几}#{当月第几周},用于指定当月的第几周的星期几触发定时任务,如:7#1,表示当月的第1周,的星期6(7为星期6,6为星期5,5为星期4,以此类推)触发定时任务
示例:
1 1 8 ? * 7
代表每年每个月的第一个星期的星期6的8点1分1秒触发一次定时任务。
最近10次执行时间:
2020-05-02 08:01:01
2020-06-06 08:01:01
2020-07-04 08:01:01
2020-08-01 08:01:01
2020-09-05 08:01:01
2020-10-03 08:01:01
2020-11-07 08:01:01
2020-12-05 08:01:01
2021-01-02 08:01:01
2021-02-06 08:01:01
练习
1,2,3 * 6-10 * * ? *
含义:每月每天的6-10点钟,每分钟的1、2、3秒都会触发一次定时任务
最近10次执行时间:
2020-04-22 17:05:01
2020-04-22 17:05:02
2020-04-22 17:05:03
2020-04-22 17:06:01
2020-04-22 17:06:02
2020-04-22 17:06:03
2020-04-22 17:07:01
2020-04-22 17:07:02
2020-04-22 17:07:03
2020-04-22 17:08:01
30/8 2,3 * * ? *
含义:每月每天的2点、3点中的每分钟的30秒之后,每隔8秒钟执行一次
最近10次执行时间:
2020-04-22 18:02:30
2020-04-22 18:02:38
2020-04-22 18:02:46
2020-04-22 18:02:54
2020-04-22 18:03:30
2020-04-22 18:03:38
2020-04-22 18:03:46
2020-04-22 18:03:54
2020-04-22 19:02:30
2020-04-22 19:02:38
2-10 30 8 1 * ? *
含义:每月的每天的1号8点30分的2-10秒期间,每秒都会执行一次
最近10次执行时间:
2020-05-01 08:30:02
2020-05-01 08:30:03
2020-05-01 08:30:04
2020-05-01 08:30:05
2020-05-01 08:30:06
2020-05-01 08:30:07
2020-05-01 08:30:08
2020-05-01 08:30:09
2020-05-01 08:30:10
2020-06-01 08:30:02
20 30 12 L * ? *
含义:每个月的最后一天的12点30分20秒执行一次
最近10次执行时间:
2020-04-30 12:30:20
2020-05-31 12:30:20
2020-06-30 12:30:20
2020-07-31 12:30:20
2020-08-31 12:30:20
2020-09-30 12:30:20
2020-10-31 12:30:20
2020-11-30 12:30:20
2020-12-31 12:30:20
2021-01-31 12:30:20
1 1 10 3W * ? *
含义:在每个月的3号临近工作日的10点1分1秒执行一次。
最近10次执行时间:
2020-05-04 10:01:01
2020-06-03 10:01:01
2020-07-03 10:01:01
2020-08-03 10:01:01
2020-09-03 10:01:01
2020-10-02 10:01:01
2020-11-03 10:01:01
2020-12-03 10:01:01
2021-01-04 10:01:01
2021-02-03 10:01:01
关于Cron表达式:各位可以来这个网站在线生成Cron表达式:在线生成Cron表达式