定时任务中的 Corn 表达式详解(超详细)

文章目录

  • 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表达式的语法和特殊字符,可以轻松实现各种复杂的任务调度需求。

你可能感兴趣的:(java,java)