Cron表达式介绍

Cron表达式介绍

cron 表达式本质上就是一个字符串,该字符串由 6 个空格分为 7 个域,每一个域代表一个时间含义。

通常定义 “年” 的部分可以省略,所以表达式常见形式是6个域。

根据“年”的部分是否省略,cron表达式通常有一下两种格式:

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

记忆:秒分时天月周

下面说一下每个位置允许的值,以及一些案例,足够我们掌握cron表达式。

允许出现的值范围(都是整数)允许出现的字符
0-59, - * /
0-59, - * /
0-23, - * /
日期1-31, - * / ? L C W
1-12 或者使用英文JAN-DEC, - * /
星期1-7或者使用英文SUN-SAT, - * / ? L C #
年(可选)1970-2099, - * /

星期(周)域中 1 代表星期日,7 代表星期六;如果使用英文的话,周一至周日分别是:MON、TUES、THUR、FRI、SAT、SUN。

要么只规定日期,要么只规定星期,两者基本上不会同时规定的。

允许出现的字符含义

以下 4 个字符可以出现在所有域中:

  • , 表示列出枚举值,符号前和符号后是递增的值。例如:在域使用5,20,则意味着在5分和20分的时候各触发一次,总共两次。
  • - 表示范围,例如在域使用5-20,表示从第5分钟到第20分钟每分钟触发一次
  • * 表示该域允许范围中的所有值。假如在域使用*, 即表示每分钟都会触发事件。
  • / 符号前表示开始时间,符号后表示每次递增的值,表示从符号前时间开始,每隔多长时间触发一次。例如在域使用5/13,则意味着从第5秒开始触发一次,然后在此分钟内每隔13秒触发一次(意味着下一分钟会重新从第5秒开始),其他域中使用时过程相同。

下面是特殊的字符:

  • ? 表示没有说明的值,不关心该字段的值(满足其他域指定的条件就会触发)。只能用在日期和星期两个域,这两个域会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ? 其中最后一位只能用?表示不关心是周几。

    1. *表示允许的所有值,实际上等于将所有有效值都列上,如果将上面的?改成*,意思就是星期内的每一天,这就会和指定的日期是冲突的,所以星期和日期,两者只能指定一个)。
    2. ?也不能同时出现在这两个域中,而且两个域中必须指定一个。
  • L 表示最后,只能出现在 日期星期域。

    单独使用时,表示最后。例如在日期域中使用,表示这个月最后一天;在星期域中使用表示这个月的每周六

    除此之外,用在星期域中时,还可以搭配数字,表示这个月的最后一个周几。例如1L,表示这个月的最后一个周日。

  • W 表示有效工作日(周一到周五),只能出现在日期域。系统将在离指定日期的最近的有效工作日触发事件

    • 例如:在 日期域 使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一 到星期五中的一天,则就在5日触发。
    • 另外一点,W的最近寻找不会跨过月份,例如 2023年4月30日是周日,指定0 0 0 30W 4 ? 2023,则它会在4月28日执行。
    • LW:表示这个月的最后一个工作日。
  • # 只能用在星期域上。符号前面数字表示周几,后面数字表示第几个,用来指定某个月的第几个星期几。例:在星期字段中用"1#2"指这个月第2个周日(1指周五,2指第2个)。如果指定的日期不存在,触发器就不会触发。


可以搜在线cron网站,对cron表达式进行校验或者查看运行时间。

【END】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值