Java 任务调度器:Quartz Scheduler – 完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 任务调度器:Quartz Scheduler



在现代 Java 开发中,经常需要按计划执行代码:发送邮件推送、清理缓存、生成报告或同步数据。为此,存在一个强大的库 Quartz Scheduler——它是 Java 生态系统中任务调度的事实标准。



Quartz Scheduler 是一个开源框架,允许您通过灵活的触发器系统创建、调度和管理任务 (Jobs)。它既支持简单的延迟,也支持复杂的 cron 调度,具有容错性,并且可以与 Spring Boot、Jakarta EE 及其他平台集成。



主要功能

  • 灵活调度 — 支持带有延迟和重复的简单触发器 (SimpleTrigger),以及用于复杂调度的 cron 触发器 (CronTrigger)。
  • 持久性 — 任务和触发器可以存储在数据库 (JDBC JobStore) 中,确保即使在应用程序重启后也能执行。
  • 集群 — 支持运行多个调度器实例,并通过数据库进行协调。
  • 监听器 — 监听任务执行事件 (JobListener, TriggerListener),用于日志记录或额外处理。
  • 监控 — 内置 API,用于查看当前任务、其状态和执行历史。


安装与配置

首先,在您的 pom.xml (Maven) 中添加依赖:

<dependency>    <groupId>org.quartz-scheduler</groupId>    <artifactId>quartz</artifactId>    <version>2.3.2</version></dependency>

对于 Gradle:

implementation 'org.quartz-scheduler:quartz:2.3.2'


创建简单任务的示例

创建一个实现 Job 接口的类。这就是我们的任务:

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.time.LocalTime;

public class SimpleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("任务执行时间: " + LocalTime.now()); // 此处放置您的业务代码 }}


使用 SimpleTrigger 调度任务

在 5 秒后启动任务,并每 10 秒重复一次:

import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;

public class SimpleSchedulerExample { public static void main(String[] args) throws SchedulerException { // 1. 创建调度器 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

// 2. 定义任务 (JobDetail) JobDetail job = JobBuilder.newJob(SimpleJob.class) .withIdentity("myJob", "group1") .build();

// 3. 创建触发器:5 秒后启动,每 10 秒重复 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build();

// 4. 将任务分配给触发器并启动 scheduler.scheduleJob(job, trigger); scheduler.start(); }}


使用 CronTrigger 进行复杂调度

Cron 表达式可以设置任意复杂度的调度。例如,每天早上 9:30:

Trigger cronTrigger = TriggerBuilder.newTrigger()        .withIdentity("cronTrigger", "group1")                    

推荐