• 【Java】cron表达式


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

    1、语法

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

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

    2、取值

    字段含义取值可用的特殊字符是否必须
    Seconds0-59,- * /
    Minutes0-59,- * /
    Hours0-23,- * /
    Day of Month1-31,- * / ? L W
    Month1-12或 JAN-DEC,- * /
    Week星期几1-7或者SUN-SAT,- * / ? L #
    Year1970-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表达式生成工具

    在这里插入图片描述

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

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

  • 相关阅读:
    应用配置文件 student-system.yaml 生成 Deployment报错,有没有厉害的解决一下的
    Java多线程编程
    mysql 如何向数据库中插入特殊字符“ ’ &等等符号
    我的私人笔记(zookeeper分布式安装)
    Emmabuntüs Debian Edition 5 正式发布
    网络编程基础知识总结——IP,端口,协议
    SSM整合-表现层与前端数据传输数据协议定义与实现
    Linux存储管理磁盘分区逻辑分区
    态路小课堂丨光纤跳线的使用与维护小指南
    设计模式-原型模式-浅克隆和深克隆在Java中的使用示例
  • 原文地址:https://blog.csdn.net/llg___/article/details/133581984