乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 前言

    • 起步
  • 第1章 快速入门指南

    • 下载和安装
    • 配置
    • 运行一个简单的应用
  • 第2章 Quartz教程

    • 使用Quartz
    • Quartz API、作业和触发器
    • 更多关于作业和作业详细信息
    • 更多关于触发器
    • 简单触发器
    • Cron触发器
    • 触发器监听器和作业监听器
    • 调度程序监听器
    • 作业存储JobStore
    • 配置、资源使用和调度器工厂
    • 高级(企业)功能
    • Quartz的其他特征
    • 专题之Corn触发器教程
  • 第3章 15个官网示例

    • 概览
    • 示例1 - 你的第一个Quartz程序
    • 示例2 - 简单触发器
    • 示例3 - Cron触发器
    • 示例4 - 作业状态和参数
    • 示例5 - 处理作业失误
    • 示例6 - 处理作业异常
    • 示例7 - 中断作业
    • 示例8 - 日历带来的乐趣
    • 示例9 - 作业监听器
    • 示例10 - 使用Quartz插件
    • 示例11 - 高负载下的Quartz
    • 示例12 - 使用RMI的远程作业调度
    • 示例13 - 集群化的Quartz
    • 示例14 - 触发器优先级
    • 示例15 - TC集群化的Quartz

触发器监听器和作业监听器

监听器是您创建的对象,用于根据调度程序中发生的事件执行操作。正如您可能猜到的,触发器监听器接收与触发器相关的事件,作业监听器接收作业相关的事件。

触发器相关事件包括:触发器触发、触发器无触发(在本文档的“触发器”部分讨论)和触发器完成(触发器触发的作业完成)。

org.quartz.TriggerListener接口

public interface TriggerListener {

    public String getName();

    public void triggerFired(Trigger trigger, JobExecutionContext context);

    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);

    public void triggerMisfired(Trigger trigger);

    public void triggerComplete(Trigger trigger, JobExecutionContext context,
            int triggerInstructionCode);
}

作业相关事件包括:作业即将执行的通知,以及作业完成执行时的通知。

org.quartz.JobListener接口

public interface JobListener {

    public String getName();

    public void jobToBeExecuted(JobExecutionContext context);

    public void jobExecutionVetoed(JobExecutionContext context);

    public void jobWasExecuted(JobExecutionContext context,
            JobExecutionException jobException);

}

使用自定义监听器

要创建监听器,只需创建一个实现org.quartz.TriggerListener和(或)org.quartz.JobListener接口的对象。然后,监听器在运行时向调度程序注册,并且必须指定名称(或者,必须通过getName()方法公布自己的名称)。

为了方便起见,除了实现这些接口之外,您的类还可以扩展JobListenerSupport或TriggerListenerSupport类,并简单地覆盖您感兴趣的事件。

监听器与一个匹配器一起注册到调度器的监听器管理中心中,该匹配器描述了监听器希望接收事件的哪些作业或触发器。

监听器在运行时向调度程序注册,不会与作业和触发器一起存储在JobStore中。这是因为监听器通常是应用程序的集成点。因此,每次运行应用程序时,都需要向调度程序重新注册监听器。

添加对特定作业有效的作业监听器:

scheduler.getListenerManager().addJobListener(myJobListener, KeyMatcher.jobKeyEquals(new JobKey("myJobName", "myJobGroup")));

您可能希望对匹配器和关键类使用静态导入,这将使您的匹配器定义更加清晰:

import static org.quartz.JobKey.*;
import static org.quartz.impl.matchers.KeyMatcher.*;
import static org.quartz.impl.matchers.GroupMatcher.*;
import static org.quartz.impl.matchers.AndMatcher.*;
import static org.quartz.impl.matchers.OrMatcher.*;
import static org.quartz.impl.matchers.EverythingMatcher.*;
...etc.

这将上述示例转化为:

scheduler.getListenerManager().addJobListener(myJobListener, jobKeyEquals(jobKey("myJobName", "myJobGroup")));

添加对特定组的所有作业有效的作业监听器:

scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));

添加对两个特定组的所有作业有效的作业监听器:

scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));

添加对所有作业有效的作业监听器:

scheduler.getListenerManager().addJobListener(myJobListener, allJobs());

注册触发器监听器的方式与此(作业监听器)相同。

大多数Quartz用户不使用监听器,但当应用程序需要通知事件时,监听器很方便,而作业本身不必明确通知应用程序。

上一页
Cron触发器
下一页
调度程序监听器