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

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

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

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

Quartz 是 Java 生态中最流行的作业调度框架。本文详解 Quartz Cron 表达式的语法。

Quartz Cron vs Linux Cron

特性Linux CronQuartz Cron
字段数5-76-7
秒❌✅
年可选可选
星期0-71-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,可以实现复杂的定时任务调度。

📚 相关文章