Listener

调度任务的监听,当前版本支持添加调度,触发器和任务的监听,其中触发器和任务的监听支持通过监听名称进行添加(Add*ListenerMatcher方法)

监听不能对外抛出异常,需要内部处理,类似于切面,监听的返回结果不会影响程序主体

Job Listener
  • IJobListener 接口
public interface IJobListener
{
string Name { get; }
// 执行前
Task JobToBeExecuted(IJobExecutionContext context);
// 作业即将被执行,但是被触发器否决了
Task JobExecutionVetoed(IJobExecutionContext context);
// 执行完毕
Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException);
}
  • Quartz.NET 自带一个监听的虚函数:JobListenerSupport

  • 向ListenerManager中添加监听

    //监听指定的任务
    scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("myJobName", "myJobGroup")));
    // 监听指定的群组
    scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.GroupEquals("myJobGroup"));
    // 监听多个群组
    scheduler.ListenerManager.AddJobListener(myJobListener,
    OrMatcher<JobKey>.Or(GroupMatcher<JobKey>.GroupEquals("myJobGroup"), GroupMatcher<JobKey>.GroupEquals("yourGroup")));
    // 所有任务都监听
    scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.AnyGroup());
Tigger Listener
  • 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);
}
  • Quartz.NET 自带一个监听的虚函数:TriggerListenerSupport
  • 向ListenerManager中添加监听方式与Job一致,只是第一个参数改为了ITriggerListener的实现类
Scheduler Listener
  • ISchedulerListener接口

    public interface ISchedulerListener
    {
    // 当IJobDetail添加到IScheduler时触发
    Task JobScheduled(Trigger trigger);
    // 当卸载IJobDetail时触发(如果任务设置为非持久化,则触发器结束任务会被卸载)
    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();
    }
  • 向ListenerManager中添加/移除监听

    // 添加
    scheduler.ListenerManager.AddSchedulerListener(mySchedListener);
    // 移除
    scheduler.ListenerManager.RemoveSchedulerListener(mySchedListener);

JobStore

该类存储了调度器中的工作数据(所有的任务,触发器和日历),可以通过对JobStore进行配置来实现对调度器中数据的管理(例如存储到数据库中等)

警告:不要再代码中使用JobStore实例,JobStore由Quartz.NET自主执行,可以通过配置进行设置。

  • JobStore设置

    1.配置文件(quartz.properties)中配置

    // 默认使用RAMJobStore配置
    quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz

    2.代码中进行配置

    // 创建JobStore
    JobStore jobStore = new RAMJobStore();
    // 创建线程池(Quartz.NET自带的CLR的托管线程池)
    var threadPool = new DefaultThreadPool();
    // 最大并发数,默认是10
    // threadPool.MaxConcurrency = 10;
    // 初始化
    threadPool.Initialize();
    // 创建Schedule
    IScheduler sched = DirectSchedulerFactory.Instance.CreateScheduler(new DefaultThreadPool(), jobStore);
  • JobStore各配置说明

    1. RAMJobStore

      Quartz.NET默认选项,将所有数据都保存到RAM中,因此效率最高;缺点是数据不是持久保存的,奔溃/结束后数据会被释放。

      使用RAMJobStore时可直接使用StdSchedulerFactory创建调度器,无需做其他操作

    2. AdoJobStore

      通过ADO.NET将数据存储在数据库中,性能下降程度需要看是否创建了主键索引。

      Sql脚本在database/tables下面,表名前缀为QRTZ_

      可以使用JobStoreTX来管理事务,数据源需要额外配置

      // 将类型设置为JobStoreTX
      quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
      //DriverDelegate驱动代理,设置需要那种数据库
      // StdAdoDelegate为ADO.NET的相关配置库
      quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz
      // 表前缀设置
      quartz.jobStore.tablePrefix = QRTZ_
      // 数据源名称
      quartz.jobStore.dataSource = myDS
      // 数据源连接字符串
      quartz.dataSource.myDS.connectionString = Server=localhost;Database=quartz;Uid=quartznet;Pwd=quartznet
      // 数据库信息
      quartz.dataSource.myDS.provider = MySql
      // 将JobDataMaps的相关数据也进行保存
      quartz.jobStore.useProperties = true
      // 序列化的格式为json
      quartz.serializer.type = json

      Quarz.NET支持的数据库列表如下(与资源配置中的支持列表不同,建议已资源配置的为准):

      • SqlServer - SQL server的数据库链接

        • 除了3.1版本外,默认依赖包为System.Data.SqlClient
        • .NET Core(3.2版本)默认依赖包为 Microsoft.Data.SqlClient
      • SystemDataSqlClient - framework 的默认设置
      • MicrosoftDataSqlClient - .NET Core默认设置
      • OracleODP - Oracle 数据库链接
      • OracleODPManaged - Oracle 11及以上
      • MySql - MySQL
      • SQLite - SQLite
      • SQLite-Microsoft - Microsoft SQLite
      • Firebird - Firebird
      • Npgsql - PostgreSQL

Quartz.Net 官方教程 Tutorial 2/3(Listener 和 JobStore)的更多相关文章

  1. Quartz.net官方开发指南系列篇

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...

  2. Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译

    本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  3. Unity性能优化(4)-官方教程Optimizing graphics rendering in Unity games翻译

    本文是Unity官方教程,性能优化系列的第四篇<Optimizing graphics rendering in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  4. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译

    本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...

  5. Quartz2.2.x官方教程

    零.Quartz是什么?能干什么? Quartz是一个开源的任务调度框架.基于定时.定期的策略来执行任务是它的核心功能,比如x年x月的每个星期五上午8点到9点,每隔10分钟执行1次.Quartz有3个 ...

  6. [爬虫] 学Scrapy,顺便把它的官方教程给爬下来

    想学爬虫主要是因为算法和数据是密切相关的,有数据之后可以玩更多有意思的事情,数据量大可以挖掘挖掘到更多的信息. 之前只会通过python中的request库来下载网页内容,再用BeautifulSou ...

  7. Note | PyTorch官方教程学习笔记

    目录 1. 快速入门PYTORCH 1.1. 什么是PyTorch 1.1.1. 基础概念 1.1.2. 与NumPy之间的桥梁 1.2. Autograd: Automatic Differenti ...

  8. Unity性能优化(1)-官方教程The Profiler window翻译

    本文是Unity官方教程,性能优化系列的第一篇<The Profiler window>的简单翻译. 相关文章: Unity性能优化(1)-官方教程The Profiler window翻 ...

  9. jeecg表单页面控件权限设置(请先看官方教程,如果能看懂就不用看这里了)

    只是把看了官方教程后,觉得不清楚地方补充说明一下: 1. 2. 3. 4.用"jeecgDemoController.do?addorupdate"这个路径测试,不出意外现在应该可 ...

  10. [转]Google Guava官方教程(中文版)

    Google Guava官方教程(中文版) http://ifeve.com/google-guava/

随机推荐

  1. FHQ Treap 详解

    鲜花 一些鲜花放在前面,平衡树学了很久,但是每学一遍都忘,原因就在于我只能 70% 理解 + 30% 背板子,所以每次都忘.这次我采取了截然不同的策略,自己按照自己的理解打一遍,大获成功(?),大概打 ...

  2. cordon节点,drain驱逐节点,delete 节点

    目录 一.系统环境 二.前言 三.cordon节点 3.1 cordon节点概览 3.2 cordon节点 3.3 uncordon节点 四.drain节点 4.1 drain节点概览 4.2 dra ...

  3. JetBrains新产品Aqua——自动化测试开发工具(抢鲜体验)

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/9a093c88.html 你好,我是测试蔡坨坨. 随着行业内卷越来越严重,自动化测试已成为测试工程师的必备技能,谈及自动化测 ...

  4. c#使用Bitmap绘图的时候,内存增大问题

    最近碰到一个问题,就是使用Biamap绘图的时候,为了防止闪烁,使用了双缓存绘制的方式,但是会碰到内存急剧增加的情况,而且在XP的工控机和Win10的机器上运行结果不一样,在Win10 上运行的时候, ...

  5. iOS逆向之某多多App抓包

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 由于某多多App现使用longlink进行数据传输,使用charle ...

  6. Cesium-03:洪水淹没

    Cesium-01:Vue 中基础使用 Cesium-02:飞机模型简单点对点飞行 Cesium-03:洪水淹没 前言 最开始想做洪水淹没的话,查了一些资料.又基于不同的实现的,如 ArcScene ...

  7. pyinstaller 打包多个资源文件到一个可执行文件

    前言 pyinstaller -w: 无终端状态 -F: 打包成一个可执行文件 开始 假设 main.py 脚本调用 test.mp4视频文件(main.py和test.mp4在同一级目录),那么将在 ...

  8. 第2-4-6章 springboot整合规则引擎Drools-业务规则管理系统-组件化-中台

    目录 7. Spring整合Drools 7.1 Spring简单整合Drools 7.1.1 以上代码均在drools_spring项目中 7.2 Spring整合Drools+web 7.2 以上 ...

  9. day24 JDBC批处理(通用泛型查询方法 & 下划线转驼峰命名法)

    批处理 public static Integer addBatch(String[] sqls){ init(); try { //设置关闭自动提交 conn.setAutoCommit(false ...

  10. 【每日一题】【排序】2021年11月13日-215. 数组中的第K个最大元素※

    给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 方法1:调库 class Solution ...