Quartz scheduler java

2025 年 5 月 3 日 | 阅读 5 分钟
Quartz scheduler java

调度器在构建 Java 应用程序中起着重要作用。QuartzJobScheduling 是一个开源的作业调度库。它拥有丰富的功能,几乎可以集成到我们的 Java 应用程序中。我们可以将其与独立应用程序或大型电子商务系统集成。

Quartz 用于创建具有数万个作业的复杂调度。Quartz 调度器支持多种企业级功能,包括集群和 JTA 事务。

如果我们的 Java 应用程序有一些需要在特定时间发生的任务,或者我们的系统有周期性的维护作业,Quartz 可能是我们理想的解决方案。以下是 Quartz 调度器在 Java 中的用途:

  1. Quartz 调度器允许企业在指定的日期和时间安排作业。
  2. 它允许我们执行安排或取消作业的操作。
  3. 它提供了启动、停止或暂停调度器的操作。
  4. 它还提供提醒服务。
  5. 它提供系统在每个工作日的晚上 11:30 进行维护。

Quartz 调度器功能

Quartz 调度器具有以下功能,使其非常适合集成到 Java 应用程序中:

Quartz scheduler java

1) 运行时环境

我们可以将 Quartz 嵌入到另一个独立的应用程序中运行,并可以在应用程序服务器中实例化。它也可以作为独立的程序集群来运行以执行作业。Quartz 还可以参与 XA 事务。作为独立应用程序,Quartz 可以通过 RMI 来运行。

2) 作业调度

作业调度是 Quartz 的另一项功能。我们可以使用 Quartz 来调度作业。我们安排作业在指定的触发器触发时运行。作业仅添加一次到调度器,但它们会与多个触发器注册。

3) 作业执行

实现 Job 接口的任何 Java 类都被称为 Job 类。这些类通过创建该 Job 类的实例来执行。该类的实例可以由我们的应用程序框架或 Quartz 实例化。当触发器触发时,调度器会通知实现 TriggerListener 和 JobListener 接口的 Java 对象,并在作业执行后,也会通知这些监听器。

Job 返回 JobCompletionCode 以通知调度器作业的成功或失败。

4) 作业持久化

Quartz 作业是持久化的,因为 Quartz 库有一个 JobStore 接口,这对于存储作业非常有用。它提供了一系列将它们存储在数据库中的机制。配置为“非易失性”的作业和触发器使用 JDBCJobStore 存储在关系数据库中。Quartz 库提供 RAMJobStore 接口,该接口将所有触发器和作业存储在 RAM 中。

5) 事务

借助 JobStoreCMT,Quartz 可以参与 JTA 事务。它管理 JTA 事务,使 Job 执行的工作自动发生在 JTA 事务中。

6) 集群

  • 负载均衡。
  • 故障转移。

让我们通过一个例子来了解如何使用 Quartz 实现调度器应用程序。在我们的例子中,我们触发一个作业,该作业每次都会调用一个业务相关的任务。程序启动 Quartz 调度器,并安排作业每分钟运行一次。

为了创建 Quartz 调度器程序,我们需要在 POM.xml 文件中添加以下依赖项。

CreateQuartzJob.java

现在,为了调度作业,我们需要创建一个调度器应用程序或 Quartz 调度器应用程序。调度作业以每次运行任务需要五个步骤。这些步骤如下:

  1. 第一步,我们需要使用 StdSchedulerFactory() 方法从 Quartz 初始化调度器实例。
  2. 之后,我们使用 Quartz API 的 start() 方法启动调度器实例。
  3. 使用 Quartz API start() 启动调度器实例
  4. 接下来,我们使用 Quartz TriggerBuilder 中的 SimpleScheduleBuilder 创建一个调度器触发器,间隔为 1 分钟。
  5. 对于 CreateQuartzJob,我们使用 Quartz JobBuilder 构建一个 JobDetail 实例。
  6. 最后一步,我们使用前面创建的 JobDetailtrigger 实例来调度作业。

让我们按照上面讨论的步骤来实现代码,以了解 Quartz 调度器是如何工作的。

QuartzScheduler.java

当我们运行 QuartzScheduler.java 类时,我们将看到如下输出:

Quartz scheduler java

CreateQuartzJob 在不同的线程中每 60 秒重复运行一次。QuartzScheduler 调度 Job 并给出相应的结果。