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")