Quartz.NET 架构与源代码分析系列 part 1 :Quartz.NET 入门

概述

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

Windows XP系统也自带了“任务计划”,它是一个简单任务调度应用,可以在“开始”->“所有程序”->“附件”->“系统工具”->“任务计划”里找到。如图1;

image

图1.Windows 的任务计划

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

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

使用

最新的版本是1.0 正式版,有 Quartz.2008.sln 和 Quartz.Server.2008.sln(分步式应用,将在下面的系列分析) ,用 Visual Studio 2008 打开 Quartz.2008.sln ,方案如图2 所示:

image

图2. Quartz.NET解决方案

Quartz.NET是核心的 Quartz 库,它的文件组织结构及作用如图3所示:

image

图3.Quartz.NET文件组织结构

Quartz.NET 的文件组织结构并不遵循一定的规范,比如“SPI” 文件夹存放调度器、作业、线程池接口,最外层也放了很多接口,如图3所示。但是大部分都可以直接辨别出来,所以这不会对我们阅读代码造成很大的影响。

下面是一个 Quartz.NET 的简单例子:

ContractedBlock.gifExpandedBlockStart.gifCode
None.gif//初始化调度器工厂 
None.gif
ISchedulerFactory sf = new StdSchedulerFactory(); 
None.gif
//获取默认调度器 
None.gif
IScheduler scheduler = sf.GetScheduler(); 
None.gif
None.gif
//作业 
None.gif
JobDetail job = new JobDetail("计算作业""组1"typeof(Job1)); 
None.gif
None.gif
//触发器 
None.gif
SimpleTrigger trigger = new SimpleTrigger("触发器1""触发器组1"5new TimeSpan(005)); 
None.gif
None.gif
//关联任务和触发器 
None.gif
scheduler.ScheduleJob(job, trigger); 
None.gif
//开始任务 
None.gif
scheduler.Start();
None.gif

首先,我们初始化一个标准的调度器工厂 StdSchedulerFactory ,并用 GetScheduler() 方法创建一个调度器。下一步是声明一个作业对象 JobDetail,它有3 个参数:作业名称、作业组名称、作业的类型。接着,实例化一个 SimpleTrigger 触发器对象,SimpleTrigger 类有6 个构造函数,上面例子的 4 个参数分别为:触发器名称、触发器组名称、循环执行次数、执行间隔。调度器调用 ScheduleJob 方法把作业对象和触发器关联起来,打开触发器就可以开始作业了。

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

ContractedBlock.gifExpandedBlockStart.gifCode
void Execute(JobExecutionContext context)

每一个要执行的作业都要继承 IJob 接口并实现 Execute 方法。

下面是Job1 的定义:

ContractedBlock.gifExpandedBlockStart.gifCode
None.gifpublic class Job1 :IJob 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif     
private int i = 0
InBlock.gif     
public void Execute(JobExecutionContext context) 
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif
InBlock.gif        Console.WriteLine(
++i); 
ExpandedSubBlockEnd.gif     }
 
ExpandedBlockEnd.gif}

上面代码的执行结果是连续输出6 个1(重复执行5次,加上第一次执行,一共6 次)。

下一篇我将要介绍 Job 作业。

思想,原理,技术,应用

参考文章

1.Microsoft 管理解决方案:作业调度

2.Quartz.NET

 

目录:Quartz.NET 架构与源代码分析系列
下一篇:Quartz.NET 架构与源代码分析系列 part 2 :Job 作业

转载于:https://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博弈论——关于Nim游戏和SG函数的几个链接

今天做了一道博弈论的题目,正好去找找相关资料再复习一下。 网上能找到的都是同样的文章,不过我觉得足够了,Nim游戏百度百科里说的很详细,包括公式、证明之类的 http://baike.baidu.com/view/1101962.htm 而对于SG函数&#xff0c…

【讨论】新一轮互联网的泡沫即将破灭,大量低级别的码农将被淘汰

最近看到BAT减少招聘,互联网企业倒闭潮开始。今年的营收额应该也有很大程度的下降,然后我进行了深刻的思考,我觉得新一轮的互联网泡沫将会破灭,行业面临新的洗盘。 虽然现在互联网行业还是如火如荼的进行,很多人没有感…

Request登录案例

一、分析和设计 1、需求 2、页面 3、druid连接池 4、jar包 5、需求设计 二、代码实现 1、web_WEB-INFO_lib使用之前要先将jar包加入工作空间, 2、JDBC工具类 3、Dao层持久化层 其中,有异常除了输出控制台日志,还可以输出流写入到一个文件中记…

Combine two strings into one.

CONCATENATE str_tmp % into str_tmp. 转载于:https://www.cnblogs.com/gangjing/archive/2009/03/13/1410623.html

基于winpcap的NDIS在IE浏览器,360安全浏览器hackwww.360.cn

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。winpcap 驱动各项功能1. 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数…

斑马Zebra驱动下载

Zebra GT800 点击进入下载页-> 自动安装包【WINXP/WIN7/WIN8】点击进入下载页-> 添加打印机向导【WINXP/WIN7/WIN8】热门下载 Zebra GK888t Zebra 888-TT/888-DT Zebra 105SL Zebra ZM400 Zebra TLP 2844 Zebra GT800 Zebra GK888d Zebra LP 2844 Zebra Z4Mplus Zebra S4…

HTTP响应消息

一、数据格式 二、相应行状态码 其中,304常见于请求图片,一个图片就是一次请求,但是后面再请求若服务器图片没有修改,则304,访问本地缓存; 500一般见于服务器代码异常,如3/0; 三、响…

javafx如何调节按钮位置_安全带高度调节器的小知识

对于开车的小伙伴对安全带已经再熟悉不过了,但是有很多车,在安全带上有一个小秘密,那就是高度调节器。高度调节器的作用:为了调节安全带上固定点的高度,使安全带能够适应不同体格的乘员,都能达到最好的保护…

『程序员』 [程序人生]程序员几种不同的境界

五流程序员比技术和工具   五流程序员关心的是用什么工具可以产生什么结果,追逐他听过最新、最好、最时髦的技术,沉浸于一些小练习,却很少走出象牙塔和客户或市场进行真正的沟通,甚至完成大型的真实案例。      四流程序员…

仿百度文库方案[openoffice.org 3+swftools+flexpaper](八) 之 常见问题集FAQ

1.txt转换swf,发生中文乱码。 txt转换为utf-8编码,或txt格式手动改为odt,上传就不会发生乱码。从根源上解决,暂时就算了...暂时不想去纠结这些鸡毛。 2.加密的pdf可能导致转换为swf失败。 3.Microsoft Excel在公式运算中支持文本型…

C语言--在终端输入多行信息,找出包含“ould”的行,并打印改行

问题:在终端输入多行信息,找出包含“ould”的行,并打印改行。如:Au,love could you and I with fate conspireTo grasp this sorry scheme of things entire,Would not we shatter it to bitd – and then.在终端输出上述的文字&a…

Response对象

一、输出流返回响应数据 二、重定向 1、重定向代码以及和转发的区别 2、相对路径 ./ 和 / 都是表示当前路径下 3、绝对路径 三、Response输出数据 1、字符输出流 其中,浏览器打开默认和操作系统使用一样的GBK编码字符集(国标码,中文&#xf…

combox 增加请选择_本命佛怎么请?

佛,从古到今都是人们在憧憬美好未来时一种精神上的象征,它能为世间众生带来好运。而我们所知道的本命佛是与十二生肖属相感应力较强的佛,佩戴与自己生肖相对应的本命佛具有增加财运,保佑健康平安、守护家庭和睦的作用。所以很多人…

使用事务

/// <summary> /// 执行事务操作 /// </summary> /// <param name"sql">字符串数组用来存储需要执行的sql语句</param> /// <returns>返回一个布尔值&#xff0c;表示是否操作成功</returns> public static bool…

C++开源跨平台类库集

C开源跨平台类库集在如下的库支持下&#xff0c;开发的系统可以很方便移植到当前大部分平台上运行而无需改动&#xff0c;只需在对应的平台下 用你喜欢的编译器 重新编译即可 经典的C库 STLport-------SGI STL库的跨平台可移植版本&#xff0c;在以前有些编译器离符合 …

javascript调试常用工具讲解

1、Console命令详解,让调试js代码变得更简单 2、《Firebug入门指南》转载于:https://www.cnblogs.com/douglas0126x/p/4906271.html

cap理论具体含义_分布式系统:CAP 理论的前世今生

CAP 理论是分布式系统设计中的一个重要理论&#xff0c;虽然它为系统设计提供了非常有用的依据&#xff0c;但是也带来了很多误解。本文将从 CAP 诞生的背景说起&#xff0c;然后对理论进行解释&#xff0c;最后对 CAP 在当前背景下的一些新理解进行分析&#xff0c;澄清一些对…

Android-i9023 Root

1. 下载http://bigota.d.miui.com/tools/miui_ns.zip 2. 下载 http://android.clients.google.com/packages/ota/google_crespo/1ada25375426.signed-soju-ota-189904.1ada2537.zip http://android.clients.google.com/packages/ota/google_crespo/VQ8PQk_V.zip Superuser-3.0.…

【转】详细解析Java中抽象类和接口的区别

在Java语言中&#xff0c; abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在&#xff0c;才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性&#xff0c;甚至可以相互替换&#xf…

文件下载案例

一、需求分析 其中&#xff0c;浏览器可以直接解析图片&#xff0c;不能解析视频&#xff0c;所以视频的超链接是下载&#xff1b; 加载文件&#xff0c;则需要知道文件的真是路径&#xff08;ServletContext&#xff09;; 前端&#xff1a; 二、代码实现 其中&#xff0c;Serv…