文章目录
- 1. Corn 表达式的定义
- 秒(0-59)
- 分(0-59)
- 时(0-23)
- 日(1-31)
- 月(0-11)
- 周(1-7)
- 2. corn表达式中的通配符
- 逗号(,)
- 连字符(-)
- 星号(*)
- 问号(?)
- 斜线(/)
- L
- W
- \#
- 3. 总结
1. Corn 表达式的定义
Corn表达式是一种用于定时执行任务的格式化字符串。它由6个字段组成分为7个域,分别表示秒、分、时、日、月、周、年。
[秒] [分] [时] [日] [月] [周] [年]
其中,通常年可以被省略。
秒(0-59)
秒字段表示每分钟的哪一秒执行任务。取值范围为0-59。例如,如果要每分钟的第30秒执行任务,可以使用30 * * * * ?
的格式。
分(0-59)
分字段表示每小时的哪一分钟执行任务。取值范围为0-59。例如,如果要每小时的第15分钟执行任务,可以使用* 15 * * * ?
的格式。
时(0-23)
时字段表示每天的哪一个小时执行任务。取值范围为0-23。例如,如果要每天的凌晨2点执行任务,可以使用* * 2 * * ?
的格式。
日(1-31)
日字段表示每月的哪一天执行任务。取值范围为1-31。例如,如果要每月的第一天执行任务,可以使用* * * 1 * ?
的格式。
月(0-11)
月字段表示每年的哪一个月执行任务。取值范围为 0-11
或用字符串 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
表示。例如,如果要每年的1月1日执行任务,可以使用* * * 1 0 ?
的格式。
周(1-7)
周字段表示每周的哪一天执行任务。取值范围为1-7,也可以用字符串 SUN, MON, TUE, WED, THU, FRI, SAT
表示,其中1表示周日,2表示周一,以此类推。例如,如果要每周的周五执行任务,可以使用* * * * * 6 ?
的格式。
2. corn表达式中的通配符
Corn表达式中还有一些特殊字符,用于指定一些特殊的时间点:
逗号(,)
指的是在两个以上的时间点中都执行,表示多个值。例如,* 1,3,5 * * * * ?
表示在每小时的第1、3、5
分钟执行任务。
连字符(-)
用于指定一个范围。例如,如果要在每周的周一至周五执行任务,可以使用0 0 * * * 2-6
的格式,其中2-6
表示周一至周五。
星号(*)
表示所有取值范围内的值,可解读为 “每”。 例如:0 0 0 * * ?
,表示每个月的每一天0点都会触发。
问号(?)
表示不指定值。例如,如果要在每月的任意一天执行任务,但不关心具体是哪一天,可以使用* * * ? * *
的格式。
斜线(/)
表示开始时间和结束时间之间的间隔值。该符号将其所在域中的表达式分为两个部分,其中第一部分是起始值,除了秒以外都会降低一个单位,比如 在 “秒” 上定义 0/5
表示从 第 0 秒开始 每 5 秒执行一次,而在 “分” 上则表示从 第 0 秒开始 每 5 分钟执行一次。例如,0/5 * * * * ?
表示从 0 秒开始,每 5 秒执行一次任务。
L
L是"last"的缩写,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”上设置”7L”这样的格式,则表示“本月最后一个周六”。
W
表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上置 15W
,表示离每月15号最近的那个工作日触发。假如15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发,如果15号正好在工作日(周一至周五),则就在该天触发。如果是 1W
就只能往本月的下一个最近的工作日推不能跨月往上一个月推。
#
用于指定某个月份的第几个周几,只能作用于 “周” 上。例如,3#1
表示该月份的第一个星期二,而 5#2
表示该月份的第二个星期四。
3. 总结
Corn表达式是一种非常灵活和强大的定时任务调度工具。通过掌握Corn表达式的语法和特殊字符,可以轻松实现各种复杂的任务调度需求。