3分钟搞定springboot 定时任务cron表达式

本文详细介绍了如何在SpringBoot应用中使用Scheduled注解配合cron表达式配置定时任务,包括cron表达式的格式、各占位符的含义以及经典案例解析。
摘要由CSDN通过智能技术生成

在开发过程中经常需要使用定时任务在特定的时间执行一些特定程序。而 springboot Scheduled注解中可以方便的使用 cron 表达式来配置定时任务。在这SpringBoot 实现定时任务一篇文章中我们介绍了如何使用Scheduled实现定时任务,下面我们看下cron该如何编写。

cron表达式格式:

{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}

说明:其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?。

cron表达式各占位符解释

字段 允许值允许的特殊字符是否允许为空
秒 0-59 , - * /
0-59 , - * /
小时0-23 , - * /
日期1-31 , - * ? / L W C
月份1-12 或者 JAN-DEC , - * /
星期1-7 或者 SUN-SAT , - * ? / L C #
年(可选)1970-2099, - * /

特殊字符说明

  • “,” :在指定的秒数触发,比如”0,15,45”代表0秒、15秒和45秒时触发任务

  • “-“:在指定的范围内触发,比如”25-45”代表从25秒开始触发到45秒结束触发,每隔1秒触发1次

  •  “*”:代表所有可能的值

  • “/”:用来指定数值的增量

例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟

 在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

  •  “?”:仅被用于天(月)和天(星期)两个子表达式,表示不指定值

 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”

  • “L” :仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写如果在“L”前有具体的内容,它就具有其他的含义了。例如:“6L”表示这个月的倒数第6天

注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题

  • “W” :代表着*日(Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最*的一个*日。大部分的商业处理都是基于工作周的,所以 W 字符可能是非常重要的。例如,日域中的 15W 意味着 "离该月15号的最*一个*日。" 假如15号是星期六,那么 trigger 会在14号(星期五)触发,因为星期四比星期一离15号更*。

  • “C”:代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。

经典案例:

“15 * * * * ?” 每15分钟触发任务

“30 10 * * * ?” 每小时的10分30秒触发任务

“0 0 0 * * ?” 每天0点0分0秒触发任务

“0 0 0 1 * ?” 每月1号0点0分0秒触发任务

“0 0 0 1 1 ? *” 每年1月1号0点0分0秒触发任务

“0 0 1 8 5 ? 2023” 2023年5月8号1点0分0秒触发任务

“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务

“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务

“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务

“15-45 * * * * ?” 15到45秒内,每秒都触发任务

“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次

“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次

“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次

“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务

“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务

“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务

“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务

“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

调试大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值