Quartz Cron 表达式详解:比 Linux Cron 更强大

详细介绍 Quartz Cron 表达式的语法和使用方法,与 Linux Cron 对比,提供实用示例。

Cron 表达式 2026-06-04 9 分钟

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,可以实现复杂的定时任务调度。

📚 相关文章