首页 > 其他分享 >Quartz.Net 官方教程(Listener 和 JobStore)

Quartz.Net 官方教程(Listener 和 JobStore)

时间:2023-01-30 13:44:53浏览次数:44  
标签:Task string JobStore Listener Quartz 监听 quartz

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自带)
    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

标签:Task,string,JobStore,Listener,Quartz,监听,quartz
From: https://www.cnblogs.com/wanghun315/p/17075632.html

相关文章

  • Quartz.Net 官方教程(Jobs 和 Trigger)
    根据官网说明类型概述IScheduler调度类核心接口IJob独立实现业务逻辑需要继承的任务接口IJobDetail给任务接口定义实例的任务说明类接口ITrigger触......
  • 定时调度插件------Quartz.NET(一)
    官网地址https://www.quartz-scheduler.net/使用说明dll引用使用NuGet搜索Quartz,作者为MarkoLahma,Quartz.NET为该插件目前最新的为3.5.0版本,.NETCore/netstand......
  • JavaWeb-Filter&Listener
    JavaWeb-Filter&Listener1,Filter1.1Filter概述Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现......
  • Servlet27 - Listener 监听器
    Listener监听xxx对象的xxx过程ServletContextListener监听ServletContext对象的创建与销毁方法名作用contextInitialized(ServletContextEventsce......
  • spring boot——请求与参数校验——重要概念——配置Servlet、Filter、Listener——代
          代码配置:packageorg.example.webFilter.config;importorg.example.webFilter.filter.FirstFilter;importorg.example.webFilter.listener.Firs......
  • Quartz 使用教程
    首先说说,为什么要写这篇文章:Quartz的v2.3.2版本改动比较大,目前网上的资料都是旧版本,很缺乏相关资料很多资料讲解非常不全面,例如QuartzListener的介绍和使用基本缺......
  • listener
    listener表示监听器。Javaweb三大组件(servlet、filter、listener)之一。监听器就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时,自动执行......
  • 【Java】监听jframe窗口大小改变函数:addComponentListener
    问题描述:主要用于解决Jframe窗口大小变化时,里面的组件的位置也会自适应的移动。相当于js里面的窗口大小改变监听函数:window.onresize=function(){//js脚本接口}......
  • Listener
    1.概念:  *web三大组件之一    *事件:一件事情    *事件源:事件发生的地方    *监听器:一个对象    *注册监听:将事件,事件源,监听器绑定在一起。当事件源......
  • HttpListener简单使用
    封装了一个简单便捷使用HttpListener的类,可直接添加接口,实现处理逻辑。1usingSystem;2usingSystem.Collections.Concurrent;3usingSystem.Collections.Gen......