目录
- 前言
- 1. 基本知识
- 2. Demo
前言
主要来源是定时任务的执行时间,通过XXL-Job来设定,相关知识推荐阅读:
- 详细分析Java中的分布式任务调度框架 XXL-Job
- 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 |