Cron 表达式
Cron 表达式
violetCron 表达式是一个字符串,用于定义任务执行的时间规则,通常由 6 或 7 个字段组成,中间用空格分隔。Spring Task、Quartz 等框架都支持使用 Cron 表达式来配置定时任务。
Cron 表达式的基本格式
秒 分 时 日 月 周 [年] |
- 年(可选):范围
1970-2099,通常省略。 - 月:范围
1-12或英文缩写JAN-DEC。 - 周:范围
1-7或英文缩写SUN-SAT(1 表示周日),部分系统支持0-6(0 表示周日)。
常用通配符
| 符号 | 含义 | 示例 |
|---|---|---|
* | 任意值 | * * * * * ? 表示每分钟执行一次 |
? | 不指定值(用于日和周字段冲突时) | 0 0 12 ? * WED 表示每周三中午 12 点 |
- | 范围 | 10-15 * * * * ? 表示每分钟的 10-15 秒执行 |
, | 多个值 | MON,WED,FRI 表示周一、周三、周五 |
/ | 间隔 | 0/5 * * * * ? 表示每 5 秒执行一次 |
L | 最后(Last) | L 在日字段表示每月最后一天,在周字段表示最后一个周几(如 6L 表示每月最后一个周五) |
W | 工作日(Weekday) | 15W 表示离每月 15 日最近的工作日 |
# | 第几个周几 | 6#3 表示每月第三个周五(6 对应周五,3 表示第三个) |
常见 Cron 表达式示例
每分钟执行一次:
0 * * * * ?
每小时的 0 分 0 秒执行:
0 0 * * * ?
每天凌晨 2 点执行:
0 0 2 * * ?
每天早上 8:30 执行:
0 30 8 * * ?
每 5 分钟执行一次:
0 0/5 * * * ?
周一至周五的 9:00-18:00 每小时执行:
0 0 9-18 * * MON-FRI
每月 1 日和 15 日的中午 12 点执行:
0 0 12 1,15 * ?
每月最后一天的 23:59 执行:
59 59 23 L * ?
每月最后一个周五的 17:00 执行:
0 0 17 ? * 6L
每年元旦(1月1日)的 00:00 执行:
0 0 0 1 1 ?
注意事项
日和周字段冲突:
- 当同时设置
日和周字段时,需用?忽略其中一个。例如:0 0 12 * * ? # 每天中午12点(周字段忽略)
0 0 12 ? * MON # 每周一中午12点(日字段忽略)
- 当同时设置
不同系统的差异:
- 部分系统(如 Linux 的 crontab)不支持秒字段,只有 5 个字段(分 时 日 月 周)。
- 周字段的起始值可能不同(如
0-6或1-7),需参考具体框架的文档。
测试工具:
- 可使用在线工具(如 CronTab Generator)验证表达式的正确性。
Spring Task 中的特殊字符
Spring Task 额外支持:
*(星号):表示所有可能的值。H(Hash):用于生成散列值,适合分布式系统负载均衡。例如:0 0 H * * ? # 每天随机时间执行(由框架分配)
通过组合这些符号,你可以灵活定义各种复杂的定时任务规则。
评论



