一. 背景html
咱们在平常开发中,可能你会遇到这样的需求:"每月的3号给用户发信息,提醒用户XXX "、"天天的0点须要统计前一天的考勤记录"、"每月的1号计算上个月的库存状况"、"定时初始化数据供其它业务使用"、"每隔2分钟轮询查数据库看某业务是否被审核经过,并提示用户" 等等。数据库
以上需求在开发中都很是常见,但它们仅仅属于低端一点的需求,稍高端一点的需求好比:" 客服派车给调度,若是调度3天内没有执行任何操做,须要提示调度要抓紧派车了 ",到这一步为止看起来和上面的需求并无什么两样,但若是我要求,系统管理员能够动态配置提示时间呢?即管理员能够配置调度几天没有执行任何操做,系统须要给出提示。这么一改的话,对于一些新手而已,难度就陡然上升了。windows
下面咱们接着升级需求,系统中有A、B、C、D。。。。等等多个业务,系统管理员能够动态配置每一个业务的执行时间状况(如:每隔2s执行一次、每个月3号执行一次等等),而且能够动态的控制每一个业务的开启、关闭、暂停、所有关闭、所有暂停等。需求升级到这个程度,估计新手就抓虾了,有必定经验的人可是没有接触过相似框架,面对这样的需求,也须要一点时间去研究。服务器
解惑:架构
需求1:也就是咱们常说的定时任务,简单一点的能够借助Timer类来实现,对时间要求复杂的须要借助第三方的框架来实现,如:Quartz.Net.框架
需求2:须要咱们动态配置定时任务的执行时间。asp.net
需求3:须要咱们本身搭建一个定时调度框架,而后来动态配置任务的开启、关闭和触发器的状况。学习
需求三就是咱们最终的目标,即咱们要搭建一套通用的定时调度框架,能够手动增长定时任务,配置其触发器,手动控制任务的开启、关闭(B/S 架构);或者C/S架构,最终部署成windows服务的形式。ui
综上所述:Quartz.Net将是咱们的最佳选择。spa
二. Quartz.Net简介
1. Quartz.Net是一个强大、开源、轻量的做业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你可以用它来为执行一个做业而建立简单的或复杂的做业调度。
它有几大优点:
a.持久化数据库:SQLServer、MySQL、MongoDB、Redis
b.集群支持:双机热备
c.支持Web B/S架构和WinForm C/S架构
d.trigger能够灵活的控制时间各种苛刻的时间要求
2. Quartz.Net框架的使用
①.引入方式:
a. 经过NuGet引入搜索Quartz引入相应的程序集。
(2.x版本须要引入三个程序集:Common.Logging、Common.Logging.Core、Quartz和一个xsd文件(用于xml配置进行代码提示)
b. 去官网下载源码,经过引入源码的形式进行使用(http://www.quartz-scheduler.net/)。
PS:目前最新版本为3.0.5(2018-06-23),这里采用的是2.6.1 即2x的最后一个版本,3x起支持.netcore,且基本用法发生一些变化,最好使用vs2017
②.基本使用:
a.建立做业调度池(Scheduler)
b.建立一个具体的做业即job (具体的job须要单独在一个文件中执行)
c.建立并配置一个触发器即trigger
d.将job和trigger加入到做业调度池中
e.开始调度 start
3. 官方地址
官网:http://www.quartz-scheduler.net/
示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
三. 系列章节
下面咱们将一块儿经过如下几个章节,系统的学习一下Quartz.Net的基本用法、扩展一些高级配置,而且最终从框架的角度来处理定时调度这一类通用的问题,欢迎广大博友前来交流、指正、学习。
第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现 :
第二节: 比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)
第三节: Quartz.Net五大构件之Scheduler(建立、封装、基本方法)和Job(建立、关联等) :
第四节: Quartz.Net五大构件之Trigger通用用法(经常使用方法、优先级、与job关联等) :
第五节: Quartz.Net五大构件之Trigger的四大触发类 :
第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :
第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 :
第九节: 利用RemoteSheduler实现Scheduler跨服务器的远程控制 :
第十节: 利用SQLServer实现Quartz的持久化和双机热备的集群模式 :
第十一节: 封装通用的定时调度框架,实现新增、删除、开启、暂停计划任务(未完):
第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】) :
!