Spring定时器 Cron表达式的用法

前言

Cron表达式是一种用于描述定时任务执行时间的字符串格式,这种表达式基于时间字段来定义任务应该在哪些时间点执行,通常包含六个或七个用空格隔开的字段,分别代表秒、分钟、小时、日期、月份和星期(年份是可选的)。

每个字段都可以是数字、星号、逗号、减号、正斜杠和问号等特殊字符的组合。星号代表匹配任意值,逗号用于列举值,减号表示值范围,正斜杠表示步长,问号用于日期和星期字段作为占位符。例如,一个Cron表达式 "0 0 12 ? * WED" 表示每星期三的中午12:00执行任务。

SUN-SAT(周中天)  :1-7(1 = 星期日) 和 SUN, MON, TUE, WED, THU, FRI, SAT

JAN-DEC(月)  :1-12 和 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC

一、语法结构

Cron表达式的基本语法可以表示为{秒数} {分钟} {小时} {日期} {月份} {星期} {年份}(年份可为空)。具体来说:

秒数:0~59之间的整数,用于指定分钟内的具体秒数。
分钟:0~59之间的整数,用于指定小时内的具体分钟数。
小时:0~23之间的整数,用于指定一天中的具体小时数。
日期:1~31之间的整数,用于指定每月中的具体日期。
月份:1~12之间的整数,用于指定具体月份。
星期:0(代表周日)~7(代表周一),用于指定具体星期数。

二、特殊字符

  • ?字符: 表示不确定的一个值,即任意一个合法值, 如每月的8号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 8 * ?。
  • ,字符: 表示数个值,即枚举,如在分域中定义8,12,35, 表示分别在第8分,第12分 第35分执行该定时任务。
  • -字符: 表示连续的范围,如在时域中定义20-22,表示在20,21,22点每小时触发一次。
  • *字符: 表示所有值,可解读为 “每”, 如在分域中定义*,表示每分钟都会触发任务,在日域中定义*,表示每天触发任务。
  • /字符: 表示指定一个值的增加幅度。n/m表示从n开始,每次增加m, 如在 秒上定义5/10 表示从 第 5 秒开始 每 10 秒执行一次。
  • #字符: 表示表示每月的第几个周几,只能作用于周上。例如2#3表示在每月的第三个周二。
  • L字符: 表示表示英文中的LAST 的意思,只能在 日和周中使用, 其中,在日中设置表示当月的最后一天,在周中设置表示周六,相当于7或SAT
  • W字符: 表示离给定日期最近的工作日(周一到周五), 只能在日中使用且只能用在具体的数字之后. 如在日上置15W,表示离每月15号最近的那个工作日触发。假如15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果是1W就只能往本月的下一个最近的工作日推不能跨月往上一个月推。

三、常用cron表达式例子

[A秒] [B分] [C时] [D日] [E月] [F星期] [G年]

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

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

0 0 12 * * ?  每天中午12点触发

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0 0 23 * * ?  每天23点执行一次

0 0 1 * * ?  每天凌晨1点执行一次

0 0 1 1 * ?  每月1号凌晨1点执行一次

0 0 23 L * ?  每月最后一天23点执行一次

0 0 1 ? * L  每周星期天凌晨1点执行一次

0 20,35,55 * * * ?  在20分、35分、55分执行一次

0 0 0,13,18,21 * * ?  每天的0点、13点、18点、21点都执行一次

0/2 * * * * ?   表示每2秒 执行任务

0 0/2 * * * ?    表示每2分钟 执行任务

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

相关推荐

  1. 动态更改 Spring 定时任务 Cron 表达优雅方案

    2024-04-22 12:22:04       57 阅读
  2. 动态更改 Spring 定时任务 Cron 表达优雅方案

    2024-04-22 12:22:04       36 阅读
  3. Lambda 表达常见

    2024-04-22 12:22:04       51 阅读
  4. spring boot 常用 Cron 表达式

    2024-04-22 12:22:04       56 阅读
  5. 正则表达一些高级

    2024-04-22 12:22:04       52 阅读
  6. Qt中正则表达

    2024-04-22 12:22:04       44 阅读
  7. React 中定时器

    2024-04-22 12:22:04       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 12:22:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 12:22:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 12:22:04       82 阅读
  4. Python语言-面向对象

    2024-04-22 12:22:04       91 阅读

热门阅读

  1. 初始jQuery

    2024-04-22 12:22:04       33 阅读
  2. 二分答案算法

    2024-04-22 12:22:04       24 阅读
  3. 图片懒加载的三种方式

    2024-04-22 12:22:04       32 阅读
  4. QT c++ 将浮点数数组转换成 QByteArray

    2024-04-22 12:22:04       41 阅读
  5. 算法训练营day14

    2024-04-22 12:22:04       36 阅读
  6. css常见动画

    2024-04-22 12:22:04       26 阅读
  7. 开发语言漫谈-Object C

    2024-04-22 12:22:04       33 阅读
  8. [leetcode] 946. 验证栈序列

    2024-04-22 12:22:04       37 阅读
  9. python scrapy 爬取豆瓣电影top250教程2

    2024-04-22 12:22:04       33 阅读
  10. 流量控制和差错控制

    2024-04-22 12:22:04       35 阅读