zoukankan      html  css  js  c++  java
  • Quartz.NET 学习笔记整理(一)

      Quartz.NET简介

       作业调度的目标在于按照预先确定的时间和指定的顺序来确保高效的数据处理流程,从而最大限度的使用系统资源。批处理流程是一种在无需最终用户干预的方式下在后台通过顺序方式运行的操作。

         Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

    Quartz.NET 是一个开源的作业调度框架,它可以被在小型应用程序甚至是企业级的应用程序。它有如下几个特点:

    • API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况
    • 触发器功能强大,比 Windows 的任务计划提供更细的触发粒度,你可以使用“Cron表达式(后文将介绍)”来实现如:每周星期一到星期五 8:00am,5:00pm(工作时间) 执行某一件任务
    • 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等
    • 作业可以保存在 RAM 中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等
    • 集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理

      Quartz.NET下载地址:http://quartznet.sourceforge.net/download.html 

      C5.dll 一个C#和其他CLI语言的泛型集合类。

      Common.Logging.dll 通用日志接口

      Common.Logging.Log4Net.dll 提供log4net对通用日志接口(Common.Logging)的实现

    Quartz.NET 例子

    //初始化调度器工厂 
    ISchedulerFactory sf = new StdSchedulerFactory(); 
    //GetScheduler() 方法创建一个调度器
    IScheduler scheduler = sf.GetScheduler(); 
    
    //声明一个作业对象 JobDetail,它有3 个参数:作业名称、作业组名称、作业的类型
    JobDetail job = new JobDetail("计算作业", "组1", typeof(Job1)); 
    
    //实例化一个 SimpleTrigger 触发器对象,SimpleTrigger 类有6 个构造函数,上面例子的 4 个参数分别为:触发器名称、触发器组名称、循环执行次数、执行间隔。
    SimpleTrigger trigger = new SimpleTrigger("触发器1", "触发器组1", 5, new TimeSpan(0, 0, 5)); 
    
    //关联任务和触发器 
    scheduler.ScheduleJob(job, trigger); 
    //开始任务 
    scheduler.Start();

    要执行的作业 Job1 是实现了 IJob 接口的类,IJob 接口只有一个简单的方法:

    void Execute(JobExecutionContext context)

       Quartz.NET 还提供了 IStatefulJob(有状态作业) 、IInterruptableJob(无状作业)这2个接口;官方文档中实现方式:

    public interface IStatefulJob : IJob  { 
    }
    
    public interface IInterruptableJob : IJob  { 
      //中断方法
    void Interrupt(); }

    注:一个Job实例可以被定义为"有状态的"或者"无状态的"。在执行无状态的任务过程中任何对JobDataMap所作的更改都将丢失。有状态的任务恰好相反,它在任务的每次执行之后重新存储JobDataMap。有状态任务的一个缺点就是它不能并发执行。也就是说,如果任务有状态,那么当触发器试图触发它,触发器就会被阻塞直到前面的执行完成。想使任务有状态,它就要实现 IStatefulJob 接口而不是实现IJob接口。

  • 相关阅读:
    嵌入式驱动视频2019.03.24
    wps如何输入连续的长破折号
    python绘图问题
    2.13
    2.12
    2.10
    2.9
    2.8
    2.7
    2.5
  • 原文地址:https://www.cnblogs.com/h20064528/p/2596916.html
Copyright © 2011-2022 走看看