概念
cron表达式是一种用于指定任务在某个时间点或周期性执行的字符串表达式。它包含6个或7个域,每个域代表不同的含义,从左到右依次为"秒 分 时 日 月 星期几 年",其中年不是必须的(不写代表当前年份),cron表达式的配置简洁方便,因此在定时调度任务中被广泛使用
参数
cron表达式包含6个或7个参数,每个参数代表不同的时间单位和取值范围
- 秒(0-59)
- 分钟(0-59)
- 小时(0-23)
- 日(1-31)
- 月(1-12 或 JAN-DEC)
- 星期几(0-6 或 SUN-SAT)
- 年(可选,1970-2099)
格式
举例与特殊符号详解
举例:
- "0 0 8 * * *" 表示每天上午8点执行任务。
- "0 0/30 9-17 * * *" 表示在每天9点到17点之间,每隔30分钟执行一次任务。
- "0 0 12 ? * WED" 表示每周三中午12点执行任务。
- "0 0 10 L * ?" 表示每个月的最后一天上午10点执行任务。
- "0 0 3-5 * * *" 表示每天凌晨3点到5点之间,每小时执行一次任务。
- "0 15 10 L * ?" 表示每个月的最后一天上午10:15分执行任务。
特殊符号:
*
(通配符):匹配任意值,例如* * * * * ?
表示每秒执行一次任务。“*”在分钟字段中表示每一分钟。,
(列表):用于指定多个取值,例如0 0 6,12,18 * * ?
表示每天6点、12点和18点执行任务。-
(范围):用于指定一个范围内的取值,例如0 0 9-17 * * MON-FRI
表示周一至周五的9点到17点之间每小时执行一次任务。/
(步长):用于指定一个取值的步长,例如5/15 * * * * ?
表示从第 5 秒开始,每 15 秒一次(5 20 35 50)执行一次,0/15也可写成*/15。0 */30 * * * ?
表示每30分钟执行一次任务。?
(无限定符):只有在日期和星期字段中可用,表示这个字段,可忽略 日期和星期不能同时指定值,必须有一个是? 或者同时为* 例如0 0 12 ? * MON-FRI
表示周一至周五中午12点执行任务。#
(日历偏移量):只能用在星期字段,指定某个月份的第几个周几,X#Y表示每个月的第Y个星期X,例如0 0 0 ? * 3#1
表示每个月的第一个星期三执行任务。L
(Last最后):表示某个指定时间内的最后一天,例如0 0 L * * ?
表示每月的最后一天执行任务。在日期字段中,表示在当月最后一天。可以在星期字段中插入“?”,表示星期值无关紧要。在星期字段中,如果“L”单独存在,就等于“7”或“SAT”,但是,前面出现数据X时,表示“当月的最后一个星期X”,即,“1L”表示当月的最后一个星期日。W
(Weekday工作日):表示距离指定日期最近的工作日,例如0 0 0 15W * ?
表示距离当月15日最近的工作日执行任务。如果15号是工作日,则执行任务;如果15号是周末,则任务会到最近的工作日执行。
15W
- - 15号是周三时,就是指15号
- - 15号是周六时,指14号周五
- - 15号是周日时,指16号周一
1W
- -1号是周六时,指3号周一,它不能跨过当月
LW
- 表示当月的最后一个工作日