【Java】cron表达式

文章目录

  • 1、语法
  • 2、取值
  • 3、cron表达式生成工具

定时任务相关的需求很多,对应的实现技术与框架也有不少,例如xxl-job、Quartz、Spring Task。不论怎么技术选型,cron表达式通常都是必要的。虽然现在生成cron表达式的小工具网站很多,不用每次都纯手搓,但认识一下,调试代码也方便些。

1、语法

{Seconds} {Minutes} {Hours} {Day of Month} {Month} {Day of Week} {Year}
{Seconds} {Minutes} {Hours} {Day of Month} {Month} {Day of Week}

从左到右依次为:秒 分 时 日 月 星期几 年,其中年不是必须的。

2、取值

字段 含义 取值 可用的特殊字符 是否必须
Seconds 0-59 ,- * /
Minutes 0-59 ,- * /
Hours 0-23 ,- * /
Day of Month 1-31 ,- * / ? L W
Month 1-12或 JAN-DEC ,- * /
Week 星期几 1-7或者SUN-SAT ,- * / ? L #
Year 1970-2099 ,- * /

表中,特殊字符的含义:

  • * : 表示匹配该域的任意值。在Minutes中使用*,就表示每分钟都会触发,Seconds的值为*就是每秒都触发执行定时任务

  • - : 表示范围。在Minutes域中用 10-20,就表示从10分钟到20分钟每分钟都会触发一次

  • , : 表示列出枚举值。在Minutes中使用1,3,就表示每到1分钟和3分钟就都会触发一次

  • / : 表示间隔时间触发(开始时间/时间间隔)。在Minutes中使用 5/10,就表示从第5分钟开始,每隔10分钟触发一次

  • ? : 表示不指定值。不指定不等于任意,而是直接根据另一个字段的值触发执行。比如你表达式中指定了每月的5号执行,此时星期那位的值写星期几都不合适,直接问号不指定就行

  • L:即last,只能用于日和星期,用在日则表示该月的最后一天,用在星期则表示该月的最后一个星期的星期x

  • # : 表示该月第n个星期x(x#n),仅用于星期。如:星期:6#3,表示该月的第三个星期五

  • W:即weekday,只能用于日,表示距离当月给定日期最近的工作日(周一到周五),如10W,即当月距离10号最近的工作日那天触发,此时,如果10号就是工作日,那就这天触发,如果10号是周六,那就9号触发,因为周五和周一比,周五更近,如果10号是周末,那就周一触发,也就是11号

  • LW: L和W可以一起组合在日字段使用。表示当月的最后一个工作日触发事件

W里,有个当月的概念,"1W"表示距离1号最近的工作日触发事件,但是,该工作日只算当月的。假如当月1号是周六,则"1W"表示在当月3号(周一)触发。就算上个月的最后一天是工作日,也不会触发

3、cron表达式生成工具

【Java】cron表达式_第1张图片

写需求时不用手搓,生成工具很多,甚至很多框架的页面都集成了生成工具,如xxl-job,按需生成后修修补补就好,生成和反解析都可以,贴几个工具:

  • http://cron.ciding.cc/
  • https://cron.qqe2.com/
  • https://www.matools.com/cron/

搜cron表达式生成器就行,这里只是整理下语法。

你可能感兴趣的:(JavaDev,java,cron表达式)