在 Java 开发中,cron 表达式 (Cron Expression)是一种时间规则字符串 ,用来定义"什么时候执行任务 "。
它最初来自 Unix 的 cron 定时器,后来被 Spring、Quartz、ScheduledThreadPoolExecutor 等 Java 调度框架直接借用,成为事实标准。
1. 格式(6 或 7 段,空格分隔)
| 段 | 含义 | 取值范围 | 允许的特殊符 |
|---|---|---|---|
| 1 | 秒(Spring/Quartz 支持) | 0--59 | , - * / |
| 2 | 分 | 0--59 | , - * / |
| 3 | 时 | 0--23 | , - * / |
| 4 | 日 | 1--31 | , - * / L W C |
| 5 | 月 | 1--12 或 JAN--DEC | , - * / |
| 6 | 星期 | 0--7(0 和 7 都是周日)或 SUN--SAT | , - * / L # C |
| 7 | 年(可选,Quartz 支持) | 1970--2099 | , - * / |
Spring 的
@Scheduled默认6 段 :秒 分 时 日 月 星期Linux 原生
crontab只有5 段 :分 时 日 月 星期
2. 常用示例(Spring 6 段)
| 表达式 | 含义 |
|---|---|
0 0 2 * * * |
每天凌晨 2 点 |
0 30 9 * * MON-FRI |
工作日早上 9:30 |
0 */10 * * * * |
每 10 秒一次 |
0 0 0 1 * * |
每月 1 号零点 |
0 0 22 * * 1-5 |
周一到周五晚上 10 点 |
0 0 8 L * * |
每月最后一天上午 8 点 |
0 0 8 * * 1#1 |
每月第一个周一上午 8 点 |
3. 在 Java 中的使用场景
-
Spring 原生
@Scheduled(cron = "0 15 10 * * *") public void report() { ... } -
Quartz
CronScheduleBuilder.cronSchedule("0 30 9 ? * MON-FRI") -
验证/解析工具
org.springframework.scheduling.support.CronExpression(Spring 5.3+)org.quartz.CronExpression
4. 快速记忆口诀
秒 分 时 日 月 星期 ,
从左到右,空格分隔;
*表示"每",,列举,-区间,/步长;
L最后,#第几,W工作日。
5. 在线生成/验证工具
一句话总结:
cron 表达式就是 Java 世界里描述"什么时候跑任务"的"时间正则"------写对 6 段,任务按时跑。