1. 什么是cron表达式
cron表达式说白了就是一串由若干数字、空格、符号按照一定的规则组成的一组字符串,这个字符串能用来表达时间信息。
2. cron表达式的结构
cron表达式从左到右分为七个域,这七个域之间以空格隔开,从左到右分别代表的值为:
秒 分 时 日 月 周 年(可以不写)
3. cron表达式每个域的取值范围及说明
字段 | 允许值 |
---|---|
秒 | 0-59, ',', '-', '*', '/' |
分 | 0-59, ',', '-', '*', '/' |
时 | 0-23, ',', '-', '*', '/' |
日 | 1-31, ',', '-', '*', '/', '?', 'L', 'W', 'C' |
月 | 1-12, JAN-DEC, ',', '-', '*', '/' |
周 | 1-7, SUN-SAT, ',', '-', '*', '/', '?', 'L', 'C', '#' |
年 | 空, 1970-2099,',', '-', '*', '/' |
- 3.1 秒
0-59
:秒域的值,表示在第多少秒的时候触发,如10表示在第十秒的时候触发
,
:用来分隔值的符号,可以让秒域有多个值,如5,10,15表示分别在第5秒,第10秒,第15秒的时候触发。
-
:表示一个范围值,在指定范围内触发,如0-5表示在第0秒到第5秒,每秒触发一次
*
:这个表示每秒进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从第5秒开始,每10秒触发一次,也就是在第5秒,15秒,25秒,35秒,45秒,55秒分别触发一次。 - 3.2 分
0-59
:分域的值,表示在第多少分钟的时候触发,如10表示在第十分钟的时候触发
,
:用来分隔值的符号,可以让分域有多个值,如5,10,15表示分别在第5分钟,第10分钟,第15分钟的时候触发。
-
:表示一个范围值,在指定范围内触发,如0-5表示在第0分钟到第5分钟,每分钟触发一次
*
:这个表示每分钟进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从第5分钟开始,每10分钟触发一次,也就是在第5分钟,15分钟,25分钟,35分钟,45分钟,55分钟分别触发一次。 - 3.3 时
0-23
:时域的值,表示在几点的时候触发,如10表示在十点的时候触发。
,
:用来分隔值的符号,可以让时域有多个值,如5,10,15表示分别在5点,10点,15点的时候触发。
-
:表示一个范围值,在指定范围内触发,如0-5表示在0点到5点,每小时触发一次
*
:这个表示每小时进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从5点开始,每10个小时触发一次,也就是在5点,15点分别触发一次。 - 3.4 日
1-31
:日域的值,表示在几号的时候触发,如10表示在10号的时候触发。
,
:用来分隔值的符号,可以让日域有多个值,如5,10,15表示分别在5号,10号,15号的时候触发。
-
:表示一个范围值,在指定范围内触发,如1-5表示在1号到5号,每天触发一次
*
:这个表示每天进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从5号开始,每10天触发一次,也就是在5号,15号分别触发一次。
?
:与周互斥,如果使用这个值则表示完全使用周设置的值,日期这个值无意义
L
:表示最后一天执行
W
:表示距离日期最近的一个工作日触发,如17W,如果17号是周六,那么会在16号,也就是周五触发,如果17号是周日,那么就会在18号,也就是周一触发
C
:计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。 - 3.5 月
1-12
:月域的值,表示在几月的时候触发,如10表示在10月的时候触发
JAN-DEC
:月的英文缩写显示,从一到十二月
,
:用来分隔值的符号,可以让月域有多个值,如5,10表示分别在5月,10月的时候触发。
-
:表示一个范围值,在指定范围内触发,如1-5表示在1月到5月,每月触发一次
*
:这个表示每月进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如5/2这个的意思表示从5月开始,每2个月触发一次,也就是在5月,7月,9月,11月分别触发一次。 - 3.6 周
1-7
:周域的值,表示在周几的时候触发,需要注意的是,这里一周的开始是周日。如1表示在周日的时候触发。
SUN-SAT
:周的英文缩写方法,从周日到周六
,
:用来分隔值的符号,可以让周域有多个值,如2,3,4表示分别在周一,周二,周三的时候触发。
-
:表示一个范围值,在指定范围内触发,如2-4表示在周一到周三,每天触发一次
*
:这个表示每周进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如2/2这个的意思表示从周一开始,每2天触发一次,也就是在周一,周三,周五,周日分别触发一次。
?
:与日互斥,如果使用这个值则表示完全使用日设置的值,周这个值无意义
L
:表示该周最后一天执行,即周六触发
C
:计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如1C在周字段中就相当于星期日之后的第一天
#
:用来指定具体的周数,#
前面代表星期,#
后面代表本月第几周。如1#2表示第二周的周日 - 3.7 年
空
:空就是什么都不填,表示每年触发一次,和*
的意思一样
1970-2099
:年域的值,表示在几几年的时候触发,如2023表示在2023年的时候触发
,
:用来分隔值的符号,可以让年域有多个值,如2023,2024,2025表示分别在2023年,2024年,2025年的时候触发。
-
:表示一个范围值,在指定范围内触发,如2023-2025表示在2023年到2025年,每年触发一次
*
:这个表示每年进行触发一次
/
:这个表示步进触发,/
前面的值表示触发的开始时间,后面的值表示偏移量,如2023/2这个的意思表示从2023年开始,每2年触发一次,也就是在2023年,2025年,2027年,...分别触发一次。
4. 总结
- 在使用cron表达式的时候,需要注意的是里面的符号全是英文的符号。
- 需要注意日域与周域这两个是互斥的,永远只会有一个生效。
- cron表达式是有七位,但是其年域可以省略,所以基本上都是只写了六位。