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点执行任务

  • 36
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Scheduled cron表达式是用于设置定时任务的一种语法格式。它由6个字段组成,分别表示秒、分钟、小时、日期、月份和星期。每个字段都可以设置具体的数值或者通配符来表示时间的触发条件。通过灵活的横向和纵向组合,cron表达式可以实现几乎任何你想要触发的时间点与周期。除了日期和星期可以使用"?"来实现互斥,其他占位符都要具有具体的时间含义,且依赖关系为:年->月->日期(星期)->小时->分钟->秒数。 例如,"*/6 * * * * ?"表示每隔6秒触发一次定时任务。在Java中,你可以使用@Scheduled注解来设置cron表达式,如下所示: @Component public class ScheduledTime { private Logger logger = LoggerFactory.getLogger(ScheduledTime.class); @Scheduled(cron="*/6 * * * * ?") private void timingScan() { // 在这里写实现代码 } } 这个例子中,使用@Scheduled注解的方法timingScan()会根据指定的cron表达式定时触发任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [@Scheduled() cron表达式详解](https://blog.csdn.net/qq_35144624/article/details/99696267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Spring boot 定时器](https://blog.csdn.net/qinxu0611/article/details/104624529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值