定时任务中的 cron 表达式

  • 1、cron 表达式的定义
  • 2、cron各域的定义
  • 3、cron的通配符及案例
  • 常用表达式例子


1、cron 表达式的定义

cron 表达式是一个字符串,该字符串由 6 个空格分为 7 个域,每一个域代表一个时间含义。 格式如下(通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成):

[秒] [分] [时] [日] [月] [周] [年]

2、cron各域的定义


是否必填

值以及范围

通配符

秒(Second)


0-59的整数

, - * /

分(Minute)


0-59的整数

, - * /

时(Hour)


0-23的整数

, - * /

日(Day)


1-31的整数

, - * ? / L W

月(Month)


1-12的整数或 JAN-DEC

, - * /

周(DayofWeek)


1-7的整数 或 SUN-SAT

, - * ? / L #

年(Year)


1970-2099

, - * /

3、cron的通配符及案例

  • ,这里指的是在两个以上的时间点中都执行。比如在 “时” 这个域中定义为 8,14,17,则表示分别在第8时,第14时和在第17时执行该定时任务。
    例如: 0 0 8,14,17 * * ?
  • -这个比较好理解就是指定在某个域的连续范围,如果我们在 “时” 这个域中定义 1-6,则表示在1到6点之间每小时都触发一次,用 , 表示 1,2,3,4,5,6
    例如: 0 0 1-6 * * ?
  • *表示所有值,可解读为 “每”。 如果在“日”这个域中设置 *,则表示每一天都会触发。
    例如:0 0 0 * ?(每天的0时0分0秒)
  • ?表示不指定值。使用的场景为不需要关心当前设置这个字段的值。比如要在每月的28号触发一个操作,但不关心是周几
    例如:0 0 0 28 * ?
  • /在某个域上周期性触发,该符号将其所在域中的表达式分为两个部分,其中第一部分是起始值,除了秒以外都会降低一个单位,比如 在 “秒” 上定义 5/30 表示从 第 5 秒开始 每 30分执行一次,而在 “分” 上则表示从 第 5 秒开始 每 30 分钟执行一次。
    例如: 5/30 * * * ?
    例如:0 5/30 * * ?
  • L表示英文中的LAST 的意思,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”上设置”7L”这样的格式,则表示“本月最后一个周六”。例如每周周六凌晨7点实行一次
    例如:0 0 7 ? * L
  • W表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上置”16W”,表示离每月16号最近的那个工作日触发。假如16号正好是周六,则找最近的周五(15号)触发, 如果16号是周未,则找最近的下周一(17号)触发.如果16号正好在工作日(周一至周五),则就在该天触发。如果是 “1W” 就只能往本月的下一个最近的工作日推不能跨月往上一个月推。
  • #表示每月的第几个周几,只能作用于 “周” 上。例如在4#2,表示某月的第二个星期三
  • LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。

常用表达式例子

(1)0 0 2 1 * ? * 表示在每月的1日的凌晨2点调整任务

(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业

(3)0 15 10 ? 6L 2022-2026 表示2022-2026年的每个月的最后一个星期五上午10:15执行作

(4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

(5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时

(6)0 0 12 ? * WED 表示每个星期三中午12点

(7)0 0 12 * * ? 每天中午12点触发

(8)0 15 10 ? * * 每天上午10:15触发

(9)0 15 10 * * ? 每天上午10:15触发

(10)0 15 10 * * ? * 每天上午10:15触发

(11)0 15 10 * * ? 2022 2022年的每天上午10:15触发

(12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发

(13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发

(14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

(15)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发

(16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发

(17)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发

(18)0 15 10 15 * ? 每月15日上午10:15触发

(19)0 15 10 L * ? 每月最后一日的上午10:15触发

(20)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发

(21)0 15 10 ? * 6L 2022-2025 2022年至2025年的每月的最后一个星期五上午10:15触发

(22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发