详细分析Corn表达式(附Demo)

前言

主要来源是定时任务的执行时间,通过XXL-Job来设定,相关知识推荐阅读:

  1. 详细分析Java中的分布式任务调度框架 XXL-Job
  2. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

1. 基本知识

在这里插入图片描述

Corn表达式通常用于在软件开发中定义定时任务的执行时间

在固定时间间隔内执行任务的表达式,常见于Java等语言的定时任务框架中,比如Quartz、Spring Task等

  • 语法结构秒 分 时 日 月 星期 [年]
    Corn表达式通常由6或7个字段组成,用空格或制表符分隔,分别表示秒、分钟、小时、日期、月份、星期和(可选)年份

  • 字段含义

秒(0-59):表示每分钟的第几秒执行任务。
分钟(0-59):表示每小时的第几分钟执行任务。
小时(0-23):表示每天的第几个小时执行任务。
日(1-31):表示每月的第几天执行任务。
月份(1-12或JAN-DEC):表示每年的第几个月执行任务。
星期(0-7或SUN-SAT,0和7都代表星期日):表示每周的第几天执行任务。
年份(可选):表示特定的年份,通常不常用。

  • 通配符
    *:表示匹配所有值,比如*在分钟字段上表示每分钟执行任务

  • 范围
    指定范围来指定时间的执行范围,例如,10-15表示从10到15

  • 列表
    使用逗号分隔的值列表,例如,1,3,5表示在1、3和5这三个值时执行任务

  • 步长
    使用/来指定一个步长,例如,0/15表示从0秒开始每隔15秒执行任务

  • 特殊字符

L:表示最后的意思,比如5L在日期字段上表示每月的最后一天
W:表示工作日(周一至周五),如果日期为工作日,则最近的工作日生效
#:用于确定每月的第几个星期几,例如6#3表示每月的第三个星期五

  • 实例

0 0 12 * * ?:每天中午12点执行任务
0 15 10 ? * MON-FRI:周一至周五每天上午10:15执行任务
0 0/5 14 * * ?:每天下午2点至2点59分,每隔5分钟执行任务

  • 注意事项
    Corn表达式中的时间是基于服务器所在的时区的
    在编写Corn表达式时,务必考虑到夏令时和时区的变化

总的来说,正确的格式如下:

 说明:
 Java(Quartz)
 *    *    *    *    *    *    *
 -    -    -    -    -    -    -
 |    |    |    |    |    |    |
 |    |    |    |    |    |    + year [optional]
 |    |    |    |    |    +----- day of week (1 - 7) sun,mon,tue,wed,thu,fri,sat
 |    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
 |    |    |    +--------------- day of month (1 - 31)
 |    |    +-------------------- hour (0 - 23)
 |    +------------------------- min (0 - 59)
 +------------------------------ second (0 - 59)

如需测试可通过如下网址:Cron在线测试工具

2. Demo

任务描述Cron展示
每天凌晨12点执行任务0 0 0 * * ?
每小时的第30分钟执行任务0 30 * * * ?
每天的上午10点和下午2点执行任务0 0 10,14 * * ?
每周一的下午1点执行任务0 0 13 ? * MON
每个月的最后一天的中午12点执行任务0 0 12 L * ?
每天的上午9点到下午5点,每隔30分钟执行任务0 0/30 9-17 * * ?
每月的第一个星期一的上午10点执行任务0 0 10 ? * 2#1
每年3月15日下午3点执行任务0 0 15 3 3 ?
每隔5分钟执行一次任务0 0/5 * * * ?
每小时的第10分钟执行任务0 10 * * * ?
每月的第一个星期一和星期三的中午12点执行任务0 0 12 ? * 2,4#1
每天的上午9点到下午6点,每隔1小时执行任务0 0 9-18/1 * * ?
每周一至周五的上午9点执行任务0 0 9 ? * MON-FRI
每月的最后一个星期五的下午3点执行任务0 0 15 ? * 6L
每年的1月1日下午2点执行任务0 0 14 1 1 ?
每月的第一个星期一的上午10点到下午2点,每隔30分钟执行任务0 0/30 10-14 2#1 MON
每周一的上午10点执行任务0 0 10 ? * MON
每小时的第15分钟执行任务0 15 * * * ?
每天的下午3点到下午6点,每隔1小时执行任务0 0 15-18/1 * * ?
每月的第一个星期五的上午10点执行任务0 0 10 ? * 6#1
  • 35
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农研究僧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值