定时调度系列之Quartz.Net详解
一. 背景
我们在日常开发中,可能你会遇到这样的需求:"每个月的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.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、服务类】) :
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,如需代码请留下你的邮箱
定时调度系列之Quartz.Net详解的更多相关文章
- 定时调度系列之Quartz.Net详解(转)
出处:https://www.cnblogs.com/yaopengfei/p/9216229.html 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提 ...
- 定时调度篇之Quartz.Net详解(被替换)
一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- Quartz 入门详解
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
- Quartz 入门详解 专题
Cron-Expressions are used to configure instances of CronTrigger. Cron-Expressions are strings that a ...
- quartz配置文件详解
quartz配置文件详解(转载) quartz学习总结: 一.关于job: 用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)
通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...
- 任务调度Cron表达式及Quartz代码详解
在线Cron表达式生成器 http://cron.qqe2.com/ cron表达式详解 http://www.cnblogs.com/linjiqin/archive/2013/07/08/3178 ...
随机推荐
- python之创建文件写入内容
https://www.cnblogs.com/evablogs/p/7096686.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...
- windowsserver 2019系统安装教程
windowsserver2019和windowsserver2016一样也分两个版本标准版和数据中心版. 1.插入系统光盘 2.选择安装版本一般选择带桌面体验的,要不安装成功后没有桌面. 3.设置分 ...
- JVM内存结构简单认知
关于JVM的面试传送门:https://blog.csdn.net/shengmingqijiquan/article/details/77508471 JVM内存结构主要划分为:堆,jvm栈,本地方 ...
- 教程一 openwrt路由器入门 远程命令行+文件系统
如图,拿到一个openwrt路由器我们第一步要远程控制. 这里在买了两块wifi-robots wifi视频模块. 0首先说下这个WIIF的信息 淘宝购买链接 https://item.taobao ...
- 课堂练习6--统计txt文本
统计文本中26个字母的频率: package bao; import java.io.BufferedReader; import java.io.FileReader; import java.io ...
- BAT面试题:请使用递归构建N叉树
题目要求: 现在我们拥有全国的省.市.县.镇的行政信息,比如 浙江省 -> 杭州市 -> 西湖区 --> xx街道,请将这些信息构建成一棵树,根节点为全国,叶子节点为镇. 我的误解: ...
- openstack第六章:dashboard
第六篇horizon— Web管理界面 一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 ...
- “Axure”介绍
一. Axure RP简介: Axure RP 能帮助网站需求设计者,快捷而简便的创建基于网站构架图的带注释页面示意图.操作流程图.以及交互设计,并可自动生成用于演示的网页文件和规格文件,以提供演示与 ...
- [Alpha阶段]发布说明
[Alplha阶段]发布说明 小小易校园小程序发布说明 版本功能 [Alpha版本]功能说明 1.注册及登录功能 2.修改密码功能 3.自动登录.退出登录功能 4.个人资料修改及简历模板功能 5.查看 ...
- python面对对象(不全解)
面对对象:以人类为例,人类通用功能:吃喝拉撒,就可以封装成一个类,不同功能:嫖赌毒,就是对象的不同功能.继承,多态… 上码 class Person(object): def __init__(sel ...