Quartz Scheduler for Java: 完整指南及示例
\n\n1. 什么是 Quartz Scheduler 以及为什么需要它
\nQuartz Scheduler 是一个功能强大、工业级的任务调度库,用于 Java 应用程序。它为开发者提供了一种灵活且可靠的机制,可以在指定时间或按特定计划执行任意 Java 代码。Quartz 既可以集成到简单的控制台工具中,也可以集成到运行在应用服务器(Tomcat、JBoss、WebLogic)和 Spring 应用程序中的复杂企业系统中。
\n为什么需要它?在任何严肃的应用程序中,迟早都需要执行后台操作:发送电子邮件、生成报告、与外部系统同步数据、清理临时文件、检查订单状态。随着需求的增长,使用 java.util.Timer 或 ScheduledExecutorService 手动实现此类机制会变得复杂且不可靠:需要管理错过的任务、集群、计划持久化以及复杂的 cron 表达式。Quartz 开箱即用地解决了所有这些问题。
Quartz 的关键特性:支持复杂触发器(cron、简单间隔、日历)、将任务和触发器持久化到数据库(JDBC JobStore)、用于容错的集群、用于监控执行的监听器、事务性,以及无需停止调度器即可动态添加、删除和修改任务的能力。正是由于这些特性,Quartz 已成为 Java 生态系统中事实上的调度标准。
\n2. 安装
\nQuartz Scheduler 通过 Maven Central 分发。要将其添加到项目中,请使用 Maven 或 Gradle 构建系统。
\nMaven
\n<dependency>\n <groupId>org.quartz-scheduler</groupId>\n <artifactId>quartz</artifactId>\n <version>2.3.2</version>\n</dependency>\n\n<!-- 用于使用 JDBC JobStore(可选) -->\n<dependency>\n <groupId>org.quartz-scheduler</groupId>\n <artifactId>quartz-jobs</artifactId>\n <version>2.3.2</version>\n</dependency>\n Gradle
\nimplementation 'org.quartz-scheduler:quartz:2.3.2'\nimplementation 'org.quartz-scheduler:quartz-jobs:2.3.2'\n 如果您使用 Spring Boot,只需添加启动器 spring-boot-starter-quartz,它已包含 Quartz 并自动配置它。
3. 快速入门 — 最小工作示例
\n让我们创建一个简单的应用程序,每 5 秒输出一次 "Hello, Quartz!"。
\nimport org.quartz.*;\nimport org.quartz.impl.StdSchedulerFactory;\n\npublic class QuartzQuickStart {\n\n // 1. 创建 Job — 执行工作的类\n public static class HelloJob implements Job {\n @Override\n public void execute(JobExecutionContext context) throws JobExecutionException {\n System.out.println("Hello, Quartz! 时间: " + System.currentTimeMillis());\n }\n }\n\n public static void main(String[] args) throws Exception {\n // 2. 从工厂获取调度器\n Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();\n\n // 3. 启动调度器\n scheduler.start();\n\n // 4. 定义 JobDetail — 任务描述\n JobDetail job = JobBuilder.newJob(HelloJob.class)\n .withIdentity("myJob", "group1")\n .build();\n\n // 5. 创建触发器 — 计划:每 5 秒,无限执行\n Trigger trigger