简洁明了看懂cron表达式

在使用定时调度任务的时候,我们最常用的,就是cron表达式了。通过cron表达式来指定任务在某个时间点或者周期性的执行。

cron表达式配置起来简洁方便,无论是Spring的@Scheduled还是用Quartz框架,都支持cron表达式。

但是理解cron表达式,还是需要花上几分钟的时间来学习的。

cron表达式的组成

cron表达式是一个字符串,由6到7个字段组成,用空格分隔。其中前6个字段是必须的,最后一个是可选的。每个字段的含义如图所示:

从左到右,依次对每个字段指定相应的值,就可以确定一个任务的执行时间点和周期了。

值可以由数字配合字符来组合。

99%的情况下会用到的字符

在大部分使用cron的场景下, - * / ? 这几个常用字符就可以满足我们的需求了。

  • 【*】:每的意思。在不同的字段上,就代表每秒,每分,每小时等。
  • 【-】:指定值的范围。比如[1-10],在秒字段里就是每分钟的第1到10秒,在分就是每小时的第1到10分钟,以此类推。
  • 【,】:指定某几个值。比如[2,4,5],在秒字段里就是每分钟的第2,第4,第5秒,以此类推。
  • 【/】:指定值的起始和增加幅度。比如[3/5],在秒字段就是每分钟的第3秒开始,每隔5秒生效一次,也就是第3秒、8秒、13秒,以此类推。
  • 【?】:仅用于【日】和【周】字段。因为在指定某日和周几的时候,这两个值实际上是冲突的,所以需要用【?】标识不生效的字段。比如【0 1 * * * ?】就代表每年每月每日每小时的1分0秒触发任务。这里的周就没有效果了。

极少能用到的字符

  • SUN:仅用于【周】字段,表示星期日。也可以用数字1设置。周日到周六分别为SUN,MON,TUE,WED,THU,FRI和SAT,对应数字1,2,3,4,5,6,7。目前Quartz支持。
  • L:即last,用于【日】【周】字段。这里需要注意的是,在不同的字段的不同使用方式,其含义有所差别。
    • 用于日字段:直接使用L代表每个月的最后一天。也支持偏移量的方式,配置[L-1]则代表每月的倒数第二天。
    • 用于周字段:直接使用L代表每周的最后一天,也就是等效于[7]或[SAT],但是如果配合上数字,比如[7L],则代表每个月最后一个周六,等效于[SATL]。目前Quartz支持。

一些常见的例子

cron表达式

含义

常用场景

执行时间

5 * * * * ?

每分钟的第5秒执行一次

常见的每分钟的定时任务,检查数据库和缓存数据是否一致

2021-04-11 13:10:05

2021-04-11 13:11:05

2021-04-11 13:12:05

2021-04-11 13:13:05

2021-04-11 13:14:05

2021-04-11 13:15:05

5 * 10-22 * * ?

从早上10点到晚上十点,每分钟的第5秒执行一次

将定时任务限制在每天的工作时间

2021-04-11 13:10:05

2021-04-11 13:11:05

2021-04-11 13:12:05

2021-04-11 13:13:05

2021-04-11 13:14:05

2021-04-11 13:15:05

5 0 0/6 * * ?

等效于5 0 0,6,12,18 * * ?

每天从0点开始,每隔6小时执行一次。执行时间为第0分5秒。

常用于每天较低频次的批量同步数据

2021-04-12 00:00:05

2021-04-12 06:00:05

2021-04-12 12:00:05

2021-04-12 18:00:05

参考文档

  1. quartz中文版文档:https://www.w3cschool.cn/quartz_doc/quartz_doc-lwuv2d2a.html
  2. https://tool.lu/crontab/
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白码上飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值