Corn表达式是一种用于定时执行任务的格式化字符串。它由6个字段组成分为7个域,分别表示秒、分、时、日、月、周、年。
[秒] [分] [时] [日] [月] [周] [年]
其中,通常年可以被省略。
秒字段表示每分钟的哪一秒执行任务。取值范围为0-59。例如,如果要每分钟的第30秒执行任务,可以使用30 * * * * ?
的格式。
分字段表示每小时的哪一分钟执行任务。取值范围为0-59。例如,如果要每小时的第15分钟执行任务,可以使用* 15 * * * ?
的格式。
时字段表示每天的哪一个小时执行任务。取值范围为0-23。例如,如果要每天的凌晨2点执行任务,可以使用* * 2 * * ?
的格式。
日字段表示每月的哪一天执行任务。取值范围为1-31。例如,如果要每月的第一天执行任务,可以使用* * * 1 * ?
的格式。
月字段表示每年的哪一个月执行任务。取值范围为 0-11
或用字符串 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
表示。例如,如果要每年的1月1日执行任务,可以使用* * * 1 0 ?
的格式。
周字段表示每周的哪一天执行任务。取值范围为1-7,也可以用字符串 SUN, MON, TUE, WED, THU, FRI, SAT
表示,其中1表示周日,2表示周一,以此类推。例如,如果要每周的周五执行任务,可以使用* * * * * 6 ?
的格式。
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是"last"的缩写,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”上设置”7L”这样的格式,则表示“本月最后一个周六”。
表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上置 15W
,表示离每月15号最近的那个工作日触发。假如15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发,如果15号正好在工作日(周一至周五),则就在该天触发。如果是 1W
就只能往本月的下一个最近的工作日推不能跨月往上一个月推。
用于指定某个月份的第几个周几,只能作用于 “周” 上。例如,3#1
表示该月份的第一个星期二,而 5#2
表示该月份的第二个星期四。
Corn表达式是一种非常灵活和强大的定时任务调度工具。通过掌握Corn表达式的语法和特殊字符,可以轻松实现各种复杂的任务调度需求。