quartz框架(八)-Listener

上篇博文,博主介绍了jobStore相关的内容。本篇博文,博主将介绍quartz框架中监听器的使用以及原理。监听器在开源框架中十分常见,通过监听器我们可以实现一些定制化的功能。

监听器就是在某一个事件发生的时候,被监听对象会根据对应事件,循环调用监听对象(监听对象需要监听器对应的方法)的方法。这么说的话,是不是跟设计模式中的观察者模式一模一样。关于quartz框架中使用到的设计模式,博主会在后面的具体某一篇文章中详细介绍。

JobListener用于监听Job执行时的相关事件,比如Job将要被执行时,Job执行被否决,job执行完成的时候。

quartz框架中,jobListener的接口定义如下所示:

public interface JobListener {

    //获取监听器的名称
    String getName();

   //Job将要被执行时
    void jobToBeExecuted(JobExecutionContext context);

   //Job执行被否决时
    void jobExecutionVetoed(JobExecutionContext context);

   //Job被执行完毕
    void jobWasExecuted(JobExecutionContext context,
            JobExecutionException jobException);

}

通过源码可知,jobListener的jobExecutionVetoed方法,会在Trigger监听器的vetoJobExecution调用时被决定,如果vetoJobExecution返回true的话,那么job的执行就会被否则。

在quartz的默认配置文件中,我们可以定义全局的JobListener。全局的JobListener需要有无参构造函数,并且它的作用域是全部job。

org.quartz.jobListener.NAME.class = com.foo.MyListenerClass
org.quartz.jobListener.NAME.propName = propValue
org.quartz.jobListener.NAME.prop2Name = prop2Value

在实际场景中,假设我们需要监控所有的任务,在它们的任务执行完毕的时候,需要记录一下时间,并对超出时间阈值的任务进行记录。这时,我们就可以在基础框架代码中实现JobListener相关的接口,而不需要每个Job业务类自己去做这个事情。

TriggerListener用于监听Trigger执行时的相关事件,比如Trigger被触发,否决job执行,trigger失火等事件。

quartz框架中,triggerListener的接口定义如下所示:


   //获取名称
   String getName();

   //trigger被触发
    void triggerFired(Trigger trigger, JobExecutionContext context);

   //否决job执行
    boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);

   //trigger失火
    void triggerMisfired(Trigger trigger);

   //trigger完成
    void triggerComplete(Trigger trigger, JobExecutionContext context,
            CompletedExecutionInstruction triggerInstructionCode);

在quartz的默认配置文件中,我们可以定义全局的TriggerListener。全局的TriggerListener需要有无参构造函数,并且它的作用域是全部Trigger。

org.quartz.triggerListener.NAME.class = com.foo.MyListenerClass
org.quartz.triggerListener.NAME.propName = propValue
org.quartz.triggerListener.NAME.prop2Name = prop2Value

SchedulerListener用于监听scheduler执行时的相关事件,比如job被添加到scheduler,job被添加到调度器的事件,scheduler正在启动的事件。

schedulerListener可以监听的事件很多,博主这里简单的罗列一下SchedulerListener的相关定义。


    void jobScheduled(Trigger trigger);

    void jobUnscheduled(TriggerKey triggerKey);

    void triggerFinalized(Trigger trigger);

    ...

SchedulerListener不像JobListener和TriggerListener一样,它不可以在配置文件中配置全局的SchedulerListener。因此SchedulerListener需要在程序运行时,通过scheduler的listenerManager进行添加。

Original: https://www.cnblogs.com/chenhaoblog/p/16014373.html
Author: 幕友皎敖奔乾
Title: quartz框架(八)-Listener

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711888/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 设计模式 18 中介者模式

    中介者模式(Mediator Pattern)属于 行为型模式 一提到中介,大家都非常熟悉,生活中最常见的就是房屋中介。 虽然中介要收取一定费用,但却能给房东和租客都提供大量遍历,…

    技术杂谈 2023年7月25日
    086
  • 17. 二叉搜索树的最小绝对值和众数

    title: 二叉搜索树的最小绝对值 📃 题目一描述 题目链接:二叉搜索树的最小绝对值 🔔 解题思路 解法一:安装顺序遍历相邻作差,每一次保留上一个遍历的值,和当前遍历的值进行相减…

    技术杂谈 2023年7月24日
    075
  • InnoDB什么时候会锁表?

    我们常常说InnoDB是行锁,但是这里介绍一下它锁表的情况。 InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来…

    技术杂谈 2023年5月31日
    0105
  • 使用Apache POI导出echarts图表到Excel表格

    转自:https://blog.csdn.net/weixin_44009447/article/details/105794496 引言:在实际项目统计报表模块中,报表的内容不单…

    技术杂谈 2023年5月31日
    0113
  • 23种设计模式之状态模式和策略模式的区别

    文章目录 概述 状态模式 策略模式 区别 总结 概述 在行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下 ; 状态模式 …

    技术杂谈 2023年7月24日
    096
  • fastjason常用方法

    什么是fastjson? Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种”假定有序快速匹配”的算法,把JSON Parse的…

    技术杂谈 2023年5月30日
    092
  • MySQL 知识点总结(简易版)

    MySQL 总结(简易版) 基本语法 0. 1基本语法 登录MySQL $ mysql -u root -p12345612 &…

    技术杂谈 2023年7月11日
    076
  • 这 BUG,绝了

    上周只上了三天班,但我也丝毫不敢懈怠,BUG 更是一个也没少写。 看着满屏幕的 ERROR,我陷入沉思。为什么我写的代如此烂,无法像大牛们写的那般优雅? 越想越自卑,越想越抑郁。我…

    技术杂谈 2023年6月22日
    099
  • linux多线程-使用mmap映射实现文件拷贝

    一、代码实现思路 1、示意图 2、示意图注解 循环创建i个线程,将src文件分为i段拷贝到dest文件中 (1)src文件的大小为src_size,前i-1个线程拷贝的文件大小为s…

    技术杂谈 2023年7月11日
    070
  • IntelliJ IDEA 2017 永久注册方法

    首先下载:JetbrainsCrack-2.6.10-release-enc.rar rover12421大神开发的下载好后改一下后缀.jar 然后放入到IDEA安装bin目录 在…

    技术杂谈 2023年6月21日
    0133
  • 常用的Linux命令

    获取linux服务器所有java进程及名称 pidof java|xargs pwdx pidof:用于查找指定名称的进程的进程号id号-s 一次只显示一个进程号-c 只显示运行在…

    技术杂谈 2023年7月11日
    071
  • 线性回归:波士顿房价(利用现成函数)

    Original: https://www.cnblogs.com/canxi-yue/p/16096168.htmlAuthor: 月月今天做题了吗Title: 线性回归:波士顿…

    技术杂谈 2023年7月11日
    069
  • Mac安装Flutter

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:个人独立开发者➤博主域名:https://www.zengqiang.org➤Git…

    技术杂谈 2023年6月1日
    0103
  • Flink如何处理update数据

    问题 Flink实时统计GMV,如果订单金额下午变了该怎么处理 具体描述 实时统计每天的GMV,但是订单金额是会修改的。 订单存储在mysql,通过binlog解析工具实时同步到k…

    技术杂谈 2023年7月11日
    0111
  • html换行的方法

    1、使用 1 <html> 2 <body> 3 <p> 4 春眠不觉晓&…

    技术杂谈 2023年7月11日
    074
  • 数据库的备份和恢复命令,使用视图,索引,事务

    备份库 直接在cmd窗口中直接输入,结束不需要输入; mysqldump -h端口号 -u用户名 -p密码 数据库名>备份地址 恢复库 在cmd窗口中进行 1、连接数据库 m…

    技术杂谈 2023年6月21日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球