Quartz.NET是什么

由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络。
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz.NET怎样能并发运行多个作业的原理。Quartz.NET依赖一套松耦合的线程池管理部件来管理线程环境。作业是一个执行任务的简单.NET类。只需实现Quartz.IJob接口,IJob接口包含唯一的一个方法Execute(),作业从这里开始执行。一旦实现了IJob接口和Execute ()方法,当Quartz.NET确定该是作业运行的时候,它将调用作业。Execute()方法内就是要做的事情。

Quartz.NET有如下几个特点

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

Quartz.NET 2.0与以前版本的改进

2012年4月9日 Quartz.NET 2.0发布了Released版,对应于Java Quartz的2.1版本,下载地址 http://quartznet.sourceforge.net/download.html 。整个版本相对于1.0版本进行了大量的修改,单元测试的代码更友好(重构了更多的接口),API是基于泛型和.NET 3.5 SP1之后的特性,例如DateTimeOffset。这是Quartz.NET 有史以来最大的、最值得兴奋的一个版本。

该版本除了在性能上有所提升外,增加了如下新特性

  • Scheduler.Clear() 提供方便用于清除所有任务、触发器和日程的方法
  • Scheduler.ScheduleJobs((IDictionary> triggersAndJobs, boolean replace) 方法可批量增加任务和触发器
  • Scheduler.UnscheduleJobs(IList triggerKeys) 方法提供批量取消任务
  • Scheduler.DeleteJobs(IList jobKeys) 批量删除任务
  • Scheduler.CheckExists(JobKey jobKey) 和 Scheduler.CheckExists(TriggerKey triggerKey)提供用于检测任务关键字的唯一性
  • AdoJobStore allows one set of tables to be used by multiple distinct scheduler instances
  • AdoJobStore is now capable of storing non-core Trigger implementations without using BLOB columns, through the use of the new TriggerPersistenceDelegate interface, which can (optionally) be implemented by implementers of custom Trigger types.
  • Cron 表达式支持指定每月的最后一天和最后一周,例如 L-3 为每月的最后三天
  • 包含调度信息的 XML 文件增加了用来指定启动时间和间隔时间的方法
  • XML 文件支持为触发器指定 priority 属性
  • 增加核心任务 DirectoryScanJob ,之前的FileScanJob 添加了一个迷你mum age参数

2.0在API上也做了重大的修改,API返回值的集合和泛型的使用,消除歧义和冗余代码,掩藏/删除不应该公开给客户端的方法,提高关注点分离,并引入 与领域特定语言DSL的核心实体(jobs and triggers),自然就有了兼容性等问题,我们现在来看下都有哪些重大的修改:

  • 不在支持.NET 1.1和2.0,需要Quartz.net 2.0至少需要.NET 3.5 SP1,是由于采用了新的语言特性和类接口
  • 许多公共接口的返回值Array更改为泛型的IList和ISet,例如GetJobGroupNames(): string[] 现在更改为 GetJobGroupNames(): IList ,现在用来标识Jobs和Triggers 现在是基于JobsKey和TriggersKey,Keys 包含一个Name和一个Group。操作特定jobs/triggers 的方法使用Keys作为参数。例如GetTrigger(TriggerKey key): ITrigger 替换了GetTrigger(string name, string group): Trigger,ITrigger现在是一个接口而不是类。ISimpleTrigger, ICronTrigger也一样。新的 DSL/builder-based API 组织Jobs和Triggers。
     IJobDetail job = JobBuilder.Create<SimpleJob>() .WithIdentity("job1", "group1") .Build();ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartAt(DateBuilder.FutureDate(2, IntervalUnit.HOURS)) .WithSimpleSchedule(x => x.RepeatHourlyForever()) .ModifiedByCalendar("holidays") .Build();

  • JobInitializationPlugin 已经移除,用XMLSchedulingDataProcessorPlugin替代
  • Microsoft's Oracle drivers已经不再支持,使用10g 或者 11g ODP.NET drivers替代
  • 数据库的Sechema已经修改,需要使用database目录下的脚本吧1.x的Schema升级到2.0
变化一 比1.0多引用了C5.dll
C5.dll 一个C#和其他CLI语言的泛型集合类。.Net2.0及以上才可以使用。简介地址:http://www.itu.dk/research/c5
变化二 quartz.config有细微变化
  • quartz.plugin.xml.type 由1.x的Quartz.Plugin.Xml.JobInitializationPlugin, Quartz变为了2.0中的Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
  • 2.0版本新增了一行配置quartz.scheduler.exporter.channelName = httpQuart

变化三 实现IJob接口 JobExecutionContext对象变成了IJobExecutionContext

变化四 quartz_jobs.xml配置节发生了变化
变化五 支持.Net版本不同
  • Quartz 1.0可以支持.Net 1.1 和 .Net 2.0及以上版本
  • Quartz 2.0仅支持.Net 3.5及以上版本,放弃了对.Net 1.1和.Net 2.0的支持

Quartz.NET 2.2 ChangeLog

This release contains important bug fixes, new functionality and minor breaking changes.
UPGRADING
Please examine and run the database\schema_20_to_22_upgrade.sql script if you are using AdoJobStore
    this script adds a new column SCHED_TIME to table QRTZ_FIRED_TRIGGERS
    file contains the alter command for SQL Server and other database samples in comments
BREAKING CHANGES
    database schema needs upgrade
    add SchedulerStarting() method to ISchedulerListener interface
    make the scheduler's TypeLoadHelper available to plugins when they are initialized
    dbFailureRetryInterval parameter was removed from DirectSchedulerFactory APIs
NEW FEATURES
    ability to override worker thread names (when using SimpleThreadPool)
    add new IScheduler method: ScheduleJob(IJobDetail job, ISet trigger) to schedule multiple triggers for a job all at once
    allow 'triggerless' initial storing of non-durable jobs.
    improvements for job recovery information
    package job_scheduling_data_2_0.xsd to nuget package's content folder
    allow scheduler exported with remoting to be used from local machine only
    support for Oracle managed ODP driver
FIXES
    job ending with exception and trigger not going to fire again, trigger is incorrectly not removed from job store
    XML schema supports multiple schedule elements but processor does not
    DailyTimeIntervalTriggerPersistenceDelegate does not handle empty time interval properly
    DailyTimeIntervalScheduleBuilder.EndingDailyAfterCount(...) doesn't pass validation
    trace throwing exception
    bug in QuartzSchedulerThread.GetRandomizedIdleWaitTime()
    can't delete or replace job without the referenced class
MISC
    Performance improvements, including improvements to some select statements in AdoJobStore

Quartz.NET基础知识概述相关推荐

  1. 实验管理员掌握的计算机知识,计算机应用基础知识概述试验.DOC

    计算机应用基础知识概述试验 第1章 计算机应用基础知识概述实验 实验1.1 键盘指法练习及汉字输入 [实验目的与要求] 熟悉键盘布局及各键的功能. 掌握正确的键盘指法. 学会拼音输入法或五笔字型输入法 ...

  2. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

    Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 前言 2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟 ...

  3. Swift基础知识概述

    第二章: Swift基础知识概述 1. 三件事 学习Swift语言 学习Xcode 理解ios开发组件,API.SwiftUI.SDK等 从以上三个方面自己修练.不用担心. 2. 开始学习 首先看一段 ...

  4. 低功耗蓝牙(BLE)基础知识概述

    1.开篇 低功耗蓝牙的概念以及低功耗蓝牙为什么能做到低功耗,蓝牙基础知识概述经典蓝牙和低功耗蓝牙的区别中就可以看出来了,这里就不多说了.本篇文章主要介绍BLE应用层开发中常见的一些概念以及BLE广播包 ...

  5. 计算机的应用范围归纳起来主要有,计算机应用基础知识概述.doc

    第1章 计算机应用基础知识 1.1 计算机的发展概述 世界上第一台电子计算机于1946年2月在美国宾夕法尼亚大学诞生,取名为ENIAC(读作"埃尼克"),即Electronic N ...

  6. 组态软件基础知识概述

    要想理解什么是组态软件,先理解什么是组态. 组态,英文名称"Configuration",是用应用软件中提供的工具.方法,完成工程中某一具体任务的过程."组态(Confi ...

  7. 前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配

    本文是内部的一次分享沉淀,偏向基础但是涉及了一些有意思的细节,文笔有限,才疏学浅,文中若有不正之处,万望告知. 前端的一大工作内容就是去兼容页面在不同内核的浏览器,不同的设备,不同的分辨率下的行为,使 ...

  8. 邮件服务器的基础知识概述

    邮件服务器中的协议: SMTP:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMT ...

  9. 传输控制协议(TCP)基础知识概述

    TCP报文段由首部字段和数据字段组成,数据字段包含一块应用数据.最大报文段长MSS(maximum segment size)限制了数据段的最大长度.当TCP发送一个大文件时(如WEB页面的图片),T ...

最新文章

  1. 微生物组数据库: 一站式环境基因组学数据云平台更新啦!
  2. vc2005编译ffmpeg以及ffplay
  3. GDB 调试多进程或者多线程应用
  4. Django 如何实现 如下 联表 JOIN 查询?
  5. java类加载器 架构 设计_类加载器(DexClassLoader)与插件化(动态加载)
  6. imagick用法!
  7. 陈艳青(为奥运冠军名字作诗)
  8. VSTO 2005 项目的布署和运行
  9. vector 详解(C++)
  10. Android增强现实(三)-3D模型展示器
  11. Java基础语法,函数的定义与调用(比较两个数的大小)
  12. 关于客户端断开连接后服务器抛出异常Connection reset
  13. 5G技术的原理(转)
  14. Win7 各种语言包下载
  15. 人生规划:事业成功的导航仪
  16. 计算机表格中如何计算数据透视表,如何在EXCEL数据透视表中进行计算 |
  17. Groovy(Java笨狗)系列--Class,Scripts
  18. 决策树可视化:鸢尾花数据集分类(附代码数据集)
  19. spark运行在windows环境的idea遇到的问题记录
  20. 推荐3本Python高分书籍,居家旅行必备神器!

热门文章

  1. SAP MM 没有录入盘点结果的盘点凭证不能执行MI07
  2. 深度丨AI挑战人类情感!机器人写诗出书背后透露了什么?
  3. thinkbook14 2021款电脑买来后发现:关机后电源指示灯仍然是亮的
  4. latex中常使用符号大全
  5. 图灵测试,时至今日还有意义吗?
  6. 三大运营商扎堆进军“元宇宙”
  7. 15℃!人类首次实现高压下室温超导,研究登上Nature封面
  8. 揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活
  9. 计算机、数学、运筹学等领域32个重要算法
  10. 马歇尔·赫伯特:人工智能的前沿技术与实例分析