Quartz Scheduler for Java: 完整指南及示例

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

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

开始课程
\n

Quartz Scheduler for Java: 完整指南及示例

\n\n
\n

1. 什么是 Quartz Scheduler 以及为什么需要它

\n

Quartz Scheduler 是一个功能强大、工业级的任务调度库,用于 Java 应用程序。它为开发者提供了一种灵活且可靠的机制,可以在指定时间或按特定计划执行任意 Java 代码。Quartz 既可以集成到简单的控制台工具中,也可以集成到运行在应用服务器(Tomcat、JBoss、WebLogic)和 Spring 应用程序中的复杂企业系统中。

\n

为什么需要它?在任何严肃的应用程序中,迟早都需要执行后台操作:发送电子邮件、生成报告、与外部系统同步数据、清理临时文件、检查订单状态。随着需求的增长,使用 java.util.Timer 或 ScheduledExecutorService 手动实现此类机制会变得复杂且不可靠:需要管理错过的任务、集群、计划持久化以及复杂的 cron 表达式。Quartz 开箱即用地解决了所有这些问题。

\n

Quartz 的关键特性:支持复杂触发器(cron、简单间隔、日历)、将任务和触发器持久化到数据库(JDBC JobStore)、用于容错的集群、用于监控执行的监听器、事务性,以及无需停止调度器即可动态添加、删除和修改任务的能力。正是由于这些特性,Quartz 已成为 Java 生态系统中事实上的调度标准。

\n
\n\n
\n

2. 安装

\n

Quartz Scheduler 通过 Maven Central 分发。要将其添加到项目中,请使用 Maven 或 Gradle 构建系统。

\n

Maven

\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

\n
implementation 'org.quartz-scheduler:quartz:2.3.2'\nimplementation 'org.quartz-scheduler:quartz-jobs:2.3.2'
\n

如果您使用 Spring Boot,只需添加启动器 spring-boot-starter-quartz,它已包含 Quartz 并自动配置它。

\n
\n\n
\n

3. 快速入门 — 最小工作示例

\n

让我们创建一个简单的应用程序,每 5 秒输出一次 "Hello, Quartz!"。

\n
import 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                    

推荐