一、介绍

今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener 、JobListener 和 SchedulerListener 这三个东东的内容,这个东西不是很难,内容也不是很多,大家学习起来会很轻松。废话少说,开始我们今天的学习吧。

 二、TriggerListener 、JobListener 和 SchedulerListener

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

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

ITriggerListener 接口

             public interface ITriggerListener
{
string Name { get; } Task TriggerFired(ITrigger trigger, IJobExecutionContext context); Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context); Task TriggerMisfired(ITrigger trigger); Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, int triggerInstructionCode);
}

2、与 Job 相关的事件包括:Job 即将执行的通知,以及 Job 完成执行时的通知。

IJobListener 接口

             public interface IJobListener
{
string Name { get; } Task JobToBeExecuted(IJobExecutionContext context); Task JobExecutionVetoed(IJobExecutionContext context); Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException);
}

3、使用自己的监听器

要创建侦听器,只需创建一个实现 ITriggerListener 或 IJobListener 接口的对象。然后在运行时向调度程序注册侦听器,并且必须给侦听器一个名称(或者更确切地说,它们必须通过Name属性来宣传自己的名称)。

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

侦听器与Matcher一起向调度程序的ListenerManager注册,Matcher描述侦听器想要为哪些作业/触发器接收事件。

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

   增加对特定作业感兴趣的 JobListener:

                scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("myJobName", "myJobGroup")));

增加对特定组的所有作业感兴趣的 JobListener:

                scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.GroupEquals("myJobGroup"));

 增加对两个特定组的所有作业感兴趣的 JobListener:

                scheduler.ListenerManager.AddJobListener(myJobListener,
OrMatcher<JobKey>.Or(GroupMatcher<JobKey>.GroupEquals("myJobGroup"), GroupMatcher<JobKey>.GroupEquals("yourGroup")));

增加对所有作业感兴趣的 JobListener:

                scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.AnyGroup());

大多数Quartz.NET用户不使用侦听器,但是当应用程序要求创建事件通知的需要时,无需Job本身显式地通知应用程序,侦听器非常方便。

4、SchedulerListeners

SchedulerListener 与 ITriggerListener 和 IJobListener 非常相似,只是它们接收到调度器本身中的事件的通知——不一定与特定触发器或作业相关的事件。

与调度程序相关的事件包括:添加作业/触发器,删除作业/触发器,调度程序中的严重错误,调度程序关闭的通知等。

ISchedulerListener 接口

                 public interface ISchedulerListener
{
Task JobScheduled(Trigger trigger); Task JobUnscheduled(string triggerName, string triggerGroup); Task TriggerFinalized(Trigger trigger); Task TriggersPaused(string triggerName, string triggerGroup); Task TriggersResumed(string triggerName, string triggerGroup); Task JobsPaused(string jobName, string jobGroup); Task JobsResumed(string jobName, string jobGroup); Task SchedulerError(string msg, SchedulerException cause); Task SchedulerShutdown();
}

SchedulerListener(调度器侦听器)在调度器的 ListenerManager 中注册。SchedulerListener(调度器侦听器)实际上可以是实现 ISchedulerListener 接口的任何对象。

增加一个SchedulerListener:

                scheduler.ListenerManager.AddSchedulerListener(mySchedListener);

删除一个SchedulerListener:

                scheduler.ListenerManager.RemoveSchedulerListener(mySchedListener);

 三、总结

好了,今天就写到这里了。大家感觉应该很轻松,内容不多。还是老规矩,我把英文原文地址发出来,英文好的可以直接看英文,理解的会更好。地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/trigger-and-job-listeners.html

不忘初心,继续努力。

Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener的更多相关文章

  1. Net作业调度(三) — Quartz.Net进阶

    介绍 前面介绍Quartz.Net的基本用法,但在实际应用中,往往有更多的特性需求,比如记录job执行的执行历史,发邮件等. 阅读目录 Quartz.Net插件 TriggerListener,Job ...

  2. Quartz.Net进阶之七:QuartzNet其他的功能简述

    一.介绍 今天是这个系列的最后一篇文章了,主要功能说的差不多了,我们来看看其他相关的内容.话说回来,虽然是这个系列的最后一篇文章,并不代表Quartz的东西就这么点,学习阶段,就这些了,如果以后有了使 ...

  3. Quartz.Net进阶之六:详述 JobStores

    一.介绍 今天开始学习 JobStore,别的先不说,也不用翻译软件来翻译,直接从字面意思看来理解一下.我第一眼的感觉就是 job 是任务的意思,Store 是商店的意思,连起来就是可以存储 Job ...

  4. Quartz.Net进阶之四:CronTrigger 详述

    以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...

  5. Quartz.Net进阶之三:SimpleTrigger详述

    以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...

  6. Quartz.Net进阶之二:关于触发器的更多信息

    与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...

  7. Quartz.Net进阶之一:初识Job作业和触发器

        前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...

  8. Docker进阶之五:容器管理

    容器管理 一.创建容器常用选项 docker container --help 指令 描述 资源限制指令 -i, --interactive 交互式 -m,--memory 容器可以使用的最大内存量 ...

  9. kubernetes进阶之五:Replication Controller&Replica Sets&Deployments

    一:Replication Controller RC是kubernetes的核心概念之一.它定义了一个期望的场景即声明某种Pod的副本数量在任意时候都要符合某个预期值. 它由以下几个部分组成: 1. ...

随机推荐

  1. egret编译 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory解决

    egret 白鹭编译时异常提示: FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory.  编译时内存溢出, 因为 ...

  2. 自己的mongodb的CRUD封装

    工具类:package Utils; import com.google.common.collect.Lists; import com.mongodb.MongoClient; import co ...

  3. Spring NoSuchBeanDefinitionException原因分析

    摘要:摘要:本文译自EugenParaschiv文章SpringNoSuchBeanDefinitionException原文链接:/2014th7cj/d/file/p/20161012/dv5o0 ...

  4. mongoexport 导出需要授权数据库中的集合 报错 Authentication failed.

    当 mongo数据库启动服务时,使用了 认证机制,在使用mongoexport导出集合文件时,需要用户权限认证. 开启数据库认证服务: mongod --auth 导出mongo中集合文件: mong ...

  5. Python-Thread(通俗易懂)

    此类表示在单独的控制线程中运行的活动,有两种方法可以指定该活动,一是将可调用对象传递给构造函数,二是通过覆盖子类中的run()方法. 如果你对线程不太理解,我们可以打个比方,把线程数看作车辆数,我们来 ...

  6. Android 开发 关于7.0 FileUriExposedException异常 详解

    异常原因 Android不再允许在app中把file://Uri暴露给其他app,包括但不局限于通过Intent或ClipData 等方法.原因在于使用file://Uri会有一些风险,比如: 文件是 ...

  7. Android开发 MVP模式的规范记录(个人总结)

    前言 首先,这篇文章不在讲解什么是mvp模式,如果需要请自行搜索mvp模式文章了解.这个文章里我只记录mvp模式的创建和mvp各自层的界限.另外这个博客属于个人使用mvp模式后一些经验总结与记录.并不 ...

  8. 强大的oracle分析函数

    转载:https://www.cnblogs.com/benio/archive/2011/06/01/2066106.html 学习步骤:1. 拥有Oracle EBS demo 环境 或者 PRO ...

  9. 李清华 201772020113《面向对象程序设计(java)》第十四周学习总结

    1.实验目的与要求 (1) 掌握GUI布局管理器用法: (2) 掌握各类Java Swing组件用途及常用API: 2.实验内容和步骤 实验1: 导入第12章示例程序,测试程序并进行组内讨论. 测试程 ...

  10. asp.net ajax get 调用(和post不一样,直接返回json才行,否则报错;post不能返回json)

    <script type="text/javascript" > $(document).ready(function () { $('#Label1').click( ...