Quartz Cron 表达式详解:比 Linux Cron 更强大
Quartz 是 Java 生态中最流行的作业调度框架。本文详解 Quartz Cron 表达式的语法。
Quartz Cron vs Linux Cron
| 特性 | Linux Cron | Quartz Cron |
|---|---|---|
| 字段数 | 5-7 | 6-7 |
| 秒 | ❌ | ✅ |
| 年 | 可选 | 可选 |
| 星期 | 0-7 | 1-7(1=周日) |
| L(最后一天) | ❌ | ✅ |
| W(最近工作日) | ❌ | ✅ |
| #(第N个星期几) | ❌ | ✅ |
Quartz Cron 语法
秒 分 时 日 月 周 [年]
| 字段 | 允许值 | 允许的特殊字符 |
|---|---|---|
| 秒 | 0-59 | , - * / |
| 分 | 0-59 | , - * / |
| 时 | 0-23 | , - * / |
| 日 | 1-31 | , - * / ? L W |
| 月 | 1-12 或 JAN-DEC | , - * / |
| 周 | 1-7 或 SUN-SAT | , - * / ? L # |
| 年 | 1970-2099 | , - * / |
特殊字符说明
| 字符 | 说明 | 示例 |
|---|---|---|
| * | 所有值 | * * * * * ?(每秒) |
| ? | 不指定 | 日和周互斥 |
| - | 范围 | 1-5(周一到周五) |
| , | 列表 | MON,WED,FRI |
| / | 步长 | 0/15(每15秒) |
| L | 最后 | L(每月最后一天) |
| W | 最近工作日 | 15W(离15号最近的工作日) |
| # | 第N个 | 6#3(第三个周五) |
常用表达式示例
每天执行
0 0 0 * * ? — 每天 00:00:00
0 0 8 * * ? — 每天 08:00:00
0 30 9 * * ? — 每天 09:30:00
0 0 */2 * * ? — 每2小时
0 0 0 1 * ? — 每月1号 00:00:00
工作日执行
0 0 9 ? * MON-FRI — 工作日 09:00:00
0 0 9 ? * 2-6 — 周一到周五 09:00:00
特定时间
0 0 0 1 1 ? — 每年1月1日 00:00:00
0 0 0 L * ? — 每月最后一天 00:00:00
0 0 0 ? * 6#3 — 每月第三个周五 00:00:00
0 0 0 15W * ? — 每月15号最近的工作日
间隔执行
0 */5 * * * ? — 每5分钟
0 0 */3 * * ? — 每3小时
0 0 0 */7 * ? — 每7天
Spring Boot 集成
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
定义 Job
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) {
System.out.println("执行任务: " + LocalDateTime.now());
}
}
配置调度
@Configuration
public class QuartzConfig {
@Bean
public JobDetail myJobDetail() {
return JobBuilder.newJob(MyJob.class)
.withIdentity("myJob")
.storeDurably()
.build();
}
@Bean
public Trigger myJobTrigger() {
return TriggerBuilder.newTrigger()
.forJob(myJobDetail())
.withIdentity("myJobTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 9 * * ?"))
.build();
}
}
常见错误
1. 日和周同时指定
❌ 0 0 9 1 * MON — 日和周冲突
✅ 0 0 9 1 * ? — 每月1号
✅ 0 0 9 ? * MON — 每周一
2. 星期几的值
❌ 0 0 9 ? * 0 — 0 无效
✅ 0 0 9 ? * 1 — 周日(Quartz 中 1=周日)
在线工具
使用 jsjson.com Cron 表达式工具 生成和测试 Quartz Cron 表达式。
总结
Quartz Cron 表达式功能强大,支持秒级精度和丰富的特殊字符。掌握 Quartz Cron,可以实现复杂的定时任务调度。