一. 背景

  我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始化数据供其它业务使用"、"每隔2分钟轮询查数据库看某业务是否被审核通过,并提示用户" 等等。

  以上需求在开发中都非常常见,但它们仅仅属于低端一点的需求,稍高端一点的需求比如:" 客服派车给调度,如果调度3天内没有执行任何操作,需要提示调度要抓紧派车了 ",到这一步为止看起来和上面的需求并没有什么两样,但如果我要求,系统管理员可以动态配置提示时间呢?即管理员可以配置调度几天没有执行任何操作,系统需要给出提示。这么一改的话,对于一些新手而已,难度就陡然上升了。

  下面我们接着升级需求,系统中有A、B、C、D。。。。等等多个业务,系统管理员可以动态配置每个业务的执行时间情况(如:每隔2s执行一次、每月3号执行一次等等),并且可以动态的控制每个业务的开启、关闭、暂停、全部关闭、全部暂停等。需求升级到这个程度,估计新手就抓虾了,有一定经验的人但是没有接触过类似框架,面对这样的需求,也需要一定的时间去研究。

解惑:

  需求1:也就是我们常说的定时任务,简答一点的可以借助Timer类来实现,对时间要求复杂的需要借助第三方的框架来实现,如:Quartz.Net.

  需求2:需要我们动态配置定时任务的执行时间。

  需求3:需要我们自己搭建一个定时调度框架,然后来动态配置任务的开启、关闭和触发器的情况。

  需求三就是我们最终的目标,即我们要搭建一套通用的定时调度框架,可以手动增加定时任务,配置其触发器,手动控制任务的开启、关闭(B/S 架构);或者C/S架构,最终部署成windows服务的形式。

  综上所述:Quartz.Net将是我们的最佳选择。

二. 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.2,这里采用的是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的四大触发类:

         第六节: 六类Calander处理六种不同的时间场景 :

         第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :

         第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 :

         第九节: 利用RemoteSheduler实现Scheduler跨服务器的远程控制 :

         第十节: 利用SQLServer实现Quartz的持久化和双机热备的集群模式 :

         第十一节: 封装通用的定时调度框架,实现新增、删除、开启、暂停计划任务(未完):

         第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】) :

        

定时调度篇之Quartz.Net详解(被替换)的更多相关文章

  1. 定时调度系列之Quartz.Net详解

    一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...

  2. 定时调度系列之Quartz.Net详解(转)

    出处:https://www.cnblogs.com/yaopengfei/p/9216229.html 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提 ...

  3. Quartz 入门详解

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  4. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...

  5. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  6. (转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的 ...

  7. Quartz 入门详解 专题

    Cron-Expressions are used to configure instances of CronTrigger. Cron-Expressions are strings that a ...

  8. quartz配置文件详解

    quartz配置文件详解(转载)     quartz学习总结: 一.关于job:    用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...

  9. 任务调度Cron表达式及Quartz代码详解

    在线Cron表达式生成器 http://cron.qqe2.com/ cron表达式详解 http://www.cnblogs.com/linjiqin/archive/2013/07/08/3178 ...

随机推荐

  1. Shell 字符截取命令 awk

    awk命令# awk '条件1{动作1} 条件2{动作2}….' 文件名一般使用关系表达式作为条件动作:1.格式化输出 2.流程控制语句 处理cut命令无法截取空格的列 例子:截取出磁盘使用率 df ...

  2. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  3. stm32 HAL库编程驱动控制文件<stm32f1xx_hal_conf.h>的使能方法

    @2019-01-25 [小记] 工具化.易控制.易配置.效率高: 驱动控制文件<stm32f1xx_hal_conf.h>中驱动模块使能由STM32CubeMX工具配置使能

  4. centos7添加并挂载新硬盘

    环境目标: 配置一台centos7,主硬盘40G装系统:副硬盘200G作为数据盘(格式:XFS)挂载到根目录:/data/ 说明:XFS是高性能文件系统,SGI为他们的 IRIX平台而设计: 自从20 ...

  5. linux复制文件到一个不存在的文件夹

    复制文件到一个不存在的文件夹时,会报错 cp -f aaa /home/admin/.m2/cp: 无法创建普通文件"/home/admin/.m2/": 是一个目录 解决的方式: ...

  6. Git错误汇总

    Git提示rejected To github.com:zhuxiaoxi/Web-Demo.git ! [rejected] master -> master (fetch first) er ...

  7. P3373 线段树模板

    好,这是一个线段树模板. #include <cstdio> using namespace std; ; long long int sum[N],tag1[N],tag2[N],mo; ...

  8. JVM调优工具

    JMap 首先要知道Java进程的pid. Windows: .. .. .. Linux: ps -ef | grep java 查看堆栈信息(jmap -heap pid) jmap -heap ...

  9. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块算法)

    传送门 题意: 中文题意,不再赘述. 题解: 下午在补分块算法的相关知识,看到某大神博客推荐的这道题目,就试着做了做: TLE了一下午可还行: 我的思路: 将这 n 个点分成 sqrt(n) 块: i ...

  10. 好用的漂浮广告 jquery

    <script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.js" type="text/javascript ...