Quartz.NET简介及入门指南
Quartz.NET简介
Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用。
Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植。
入门指南
本入门指南包括以下内容:
- 下载 Quartz.NET
- 安装 Quartz.NET
- 根据你的特定项目配置 Quartz
- 启动一个样例程序
下载和安装
你可以下载 zip 文件或使用 Nuget 程序包。Nuget 程序包只包含 Quartz.NET 运行所必须的二进制文件,zip 文件则包含源码、普通示例程序和 Quartz.NET 的服务端示例程序。
Nuget程序包
没有什么比这个更简单的了。只需要打开 Visual Studio (前提是安装了Nuget)并且从包管理器中添加 Quartz 的引用即可,步骤如下:
- 在项目的引用上右键单击选择“管理Nuget程序包”
- 选择“浏览”选项卡,在搜索框中输入“Quartz”并回车
- 选择 Quartz 并在右侧点击安装即可。
或者用 Nuget 命令行工具,输入如下指令:
Install-Package Quartz
配置Quartz.NET
这是很重要的一步,Quartz.NET 是一个配置灵活的类库。有三种提供Quartz.NET配置信息的方式(三种方式之间并不是互相排斥的):
- 通过提供 NameValueCollection 形式的参数以编程的形式来调度工厂;
- 通过在标准的应用程序配置文件(形如youapp.exe.config)中添加 quartz-element 相关配置节;
- 在应用程序根目录中添加 quartz.config
你可以在Quartz.NET 的zip 文件中找到以上三种配置形式的例子。
为了快速地启用示例,一个基本的 quartz.config 应包含如下内容:
quartz.scheduler.instanceName = MyScheduler
quartz.threadPool.threadCount = 3
quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz
要记得将此文件在 Visual Studio 的文件属性的“复制到输出目录”设置为“总是复制”,否则将会因配置文件缺失而导致程序运行失败。
这个配置文件创建的调度器有以下特性:
- quartz.scheduler.instanceName - 这个调度器的名称将是 "MyScheduler".
- quartz.threadPool.threadCount - 调度器将会在线程池中启用3个线程,这意味着最多只能有3个任务同时运行。
- quartz.jobStore.type - 所有Quartz的相关数据,例如任务和触发器的详细信息将会保存在内存中(而不是数据库中)。即使你有一个数据库并且想在Quartz中使用它,我也建议你先以内存模式运行Quartz直到你开启了一个使用数据库工作的新次元。
实际上你并不需要去人为指定这些属性,Quartz.NET 拥有健全的默认配置信息。
开始一个示例程序
在你下载并安装 Quartz.NET 之后,便可以开始着手编写一个示例程序了。以下代码包含了一个调度器实例,开启它并随后关闭了它。
Program.cs
public class Program // and start it off // some sleep to show what's happening // and last shut down the scheduler when you are ready to close your program |
当你使用 StdSchedulerFactory.GetDefaultScheduler() 获取到一个调度器实例后,由于后台还会有一个活动线程(非守护线程)存在,你的程序将不会通过默认情况关闭直到你调用了 scheduler.Shutdown()。
添加日志
Common.Logging的底层可以通过配置来使用不同的日志框架,即 Enterprise Library, Log4Net 和 NLog。
但是为了使示例保持简单我们选择了最简单的途径,通过代码实现调用 Common.Logging 的基础日志机制将日志输出到控制台。
在 Program.cs 中添加以下内容:
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info}; |
尝试启动应用程序并添加任务
现在当我们启动应用程序的时候可以得到类似下面的日志输出:
11.1.2014 14:52:04 [INFO] Quartz.Impl.StdSchedulerFactory - Quartz.NET properties loaded from configuration file 'c:\ConsoleApplication1\bin\Debug\quartz.config' 11.1.2014 14:52:04 [INFO] Quartz.Impl.StdSchedulerFactory - Using default implementation for object serializer 11.1.2014 14:52:04 [INFO] Quartz.Impl.StdSchedulerFactory - Using default implementation for ThreadExecutor 11.1.2014 14:52:04 [INFO] Quartz.Core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: Quartz.Core.SchedulerSignalerImpl 11.1.2014 14:52:04 [INFO] Quartz.Core.QuartzScheduler - Quartz Scheduler v.2.2.1.400 created. 11.1.2014 14:52:04 [INFO] Quartz.Simpl.RAMJobStore - RAMJobStore initialized. 11.1.2014 14:52:04 [INFO] Quartz.Core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.1.400) 'MyScheduler' with instanceId 'NON_CLUSTERED' Scheduler class: 'Quartz.Core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'Quartz.Simpl.SimpleThreadPool' - with 3 threads. Using job-store 'Quartz.Simpl.RAMJobStore' - which does not support persistence. and is not clustered. 11.1.2014 14:52:04 [INFO] Quartz.Impl.StdSchedulerFactory - Quartz scheduler 'MyScheduler' initialized 11.1.2014 14:52:04 [INFO] Quartz.Impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1.400 11.1.2014 14:52:04 [INFO] Quartz.Core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED started. |
我们创建一个简单的 HelloJob 任务来测试功能,这个任务将输出问候信息到控制台:
public class HelloJob : IJob { public void Execute(IJobExecutionContext context) { Console.WriteLine("Greetings from HelloJob!"); } } |
我们来做一些更有趣的事情,在 Start() 之后线程休眠之前我们加入一些代码:
// define the job and tie it to our HelloJob class // Trigger the job to run now, and then repeat every 10 seconds // Tell quartz to schedule the job using our trigger |
下面是一个完整的控制台程序内容:
using System; using Quartz; namespace ConsoleApplication1 // Grab the Scheduler instance from the Factory // and start it off // define the job and tie it to our HelloJob class // Trigger the job to run now, and then repeat every 10 seconds // Tell quartz to schedule the job using our trigger // some sleep to show what's happening // and last shut down the scheduler when you are ready to close your program Console.WriteLine("Press any key to close the application"); public class HelloJob : IJob |
Quartz.NET简介及入门指南的更多相关文章
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- Quartz入门指南
Quartz入门指南 看到官网的教程对于新手来说不够全面和连贯,因此结合自己的使用过程写下这个入门指南,用以解惑.本文基于Quartz2.2.2版本.请注意,本文为了易于上手,省略了许多重要的概念,建 ...
- Redis入门指南之一(简介)
1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...
- Quartz.NET快速入门指南
最近,在工作中遇到了 Quartz.net 这个组件,为了更好的理解项目代码的来龙去脉,于是决定好好的研究一下这个东西.确实是好东西,既然是好东西,我就拿出来分享一下.万丈高楼平地起,我们也从入门开始 ...
- Quartz入门例子简介 从入门到菜鸟(一)
转: Quartz入门例子简介 从入门到菜鸟(一) 2016年11月19日 22:58:24 爱种鱼的猫 阅读数:4039 刚接触quartz这个词并不是在学习过程中...而是WOW里面的界面插件 ...
- 【HBase】HBase Getting Started(HBase 入门指南)
入门指南 1. 简介 Quickstart 会让你启动和运行一个单节点单机HBase. 2. 快速启动 – 单点HBase 这部分描述单节点单机HBase的配置.一个单例拥有所有的HBase守护线程- ...
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- (转载)李剑英的CSLight入门指南结合NGUI热更新
原地址:http://www.xuanyusong.com/archives/3075 李剑英的CSLight入门指南文档撰写者:GraphicQQ: 1065147807 一. CSLIGHT 作者 ...
- RequireJS 入门指南
RequireJS 入门指南 http://requirejs.org/ 简介如今最常用的JavaScript库之一是RequireJS.最近我参与的每个项目,都用到了RequireJS,或者是我向它 ...
随机推荐
- Oracle多关键字模糊查询
以前写SQL时,知道MySQL多字段模糊查询可以使用[charlist] 通配符,如: SELECT * FROM Persons WHERE City LIKE '[ALN]%'但是在Oracle中 ...
- 神经网络前向后向传播(理论推导+代码) 单层神经网络相当于logistic regression
建立神经网络的主要步骤是: 1. 定义模型结构(例如输入特征的数量) 2. 初始化模型的参数 3. 循环: # 3.1 计算当前损失(正向传播) # 3.2 计算当前梯度(反向传播) # 3.3 更新 ...
- 用python写http接口自动化测试框架
本文是转载张元礼的博客 http://blog.csdn.Net/vincetest 一.测试需求描述 对服务后台一系列的http接口功能测试. 输入:根据接口描述构造不同的参数输入值 输出:XML文 ...
- iOS下拉刷新和上拉刷新
在iOS开发中,我们经常要用到下拉刷新和上拉刷新来加载新的数据,当前这也适合分页.iOS原生就带有该方法,下面就iOS自带的下拉刷新方法来简单操作. 上拉刷新 1.在TableView里,一打开软件, ...
- 转载如何实现portlet之间的传递参数
Liferay 6开发学习(三十):跨页面Portlet之间的调用与数据传递 2014年10月09日 Liferay 评论 2 条 阅读 4,209 views 次 Portlet之间的通信方法有多种 ...
- HDU 1392 Surround the Trees(几何 凸包模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1392 题目大意: 二维平面给定n个点,用一条最短的绳子将所有的点都围在里面,求绳子的长度. 解题思路: 凸包的模 ...
- Acrobat 无法在本页面上执行OCR识别
下载的电子书有时不能选中,或作黄色标记,在用acrobat pro作文本识别时,报 Acrobat 无法在本页面上执行OCR识别 解决方法 参照 http://jingyan.baidu.com/ar ...
- 013-安装VNC服务
(1)#001-安装#光盘iso文件安装mount /dev/cdrom /mntcd /mnt/Packagesrpm -ivh tigervnc*rpm -ivh tigervnc按两次tab键 ...
- 论文笔记:语音情感识别(二)声谱图+CRNN
一:An Attention Pooling based Representation Learning Method for Speech Emotion Recognition(2018 Inte ...
- MyBatis学习笔记(八)——Mybatis3.x与Spring4.x整合
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn arc ...