Quartz.net 2.x 学习笔记01
Quartz.net 2.0 2012年4月9日发布了Released版本,到目前(2014-12-08)为止是2.3版
Quartz.net 项目地址:http://www.quartz-scheduler.net/
官方2.x 教程:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html
Quartz.net 2.x在.net中的使用
Quartz.net 的介绍和下载网上很多。Quartz.net是一个开源的专门用来处理我们日常所说的定时任务,就像你想让程序某些时间去做一些事情(例如:每天晚上0点的时候定时给领导发数据邮件)。
首先新建一个控制台应用程序:

第二步,添加Quartz.net的引用(有以下2种方式)
一、Quartz.net的引用可以自己下载dll自行引用(这里要提醒一下,quartz.net还依赖于Common.Logging.dll,同时版本要一致,下载可以去官方下载:http://www.quartz-scheduler.net/ 和Common.Logging连同一起)
二、直接使用NuGet添加引用

在搜索处输入quartz.net搜索安装即可(目前是2.3)

同上图可以看到它有个依赖项Common.Logging,安装时会自动将Common.Logging也安装上,所以推荐使用NuGet的引用方式。
当然NuGet你也可以通过命令的方式安装:Install-Package Quartz
开始之前先来说一下Quartz.net的配置(Configuration)
也有几种方式 (以下是自己的理解+翻译:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html)
1、在你的程序中使用NameValueCollection的方式给定时器工厂(scheduler factory)提供参数
2、在程序的config文件中使用quartz配置节
3、在程序的根目录上使用一个命名为quartz.config的文件
三种方式其实是一样的,都是提供键值对的参数值 (方便以后修改的话,建议使用2或者3)
例如使用quartz.config 会看到是如下大概的形式:
|
quartz.scheduler.instanceName = MyScheduler quartz.threadPool.threadCount = 3 quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz |
上面简单的意思就是
定时器的名字是MyScheduler,线程池中分配3个线程,也就是说同时最多只能有3个任务在执行,第3个配置是任务的存储类型,因为默认Quartz的所有数据(JobDetail、triggers)是保存在内存中的,上面是配置存入数据库(可以去下载quartz.net的源码,你会看到它提供了相关的建表的语句,可以直接使用它的表,当然是靠配置去使用-------表有点多,并且我目前的业务没有那么复杂,如果使用,我会选择自己建表存储)。
第三步、下面开始一个简单的任务
我还是按照官方的教程一步一步来,将控制台的Program.cs修改成如下代码:
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl; namespace Quartz001
{
class Program
{ static void Main(string[] args)
{
//配置Common.Logging的日志输出为控制台的方式
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info }; try
{
//通过工厂得到Scheduler的一个实例
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //开启
scheduler.Start(); Thread.Sleep(TimeSpan.FromSeconds()); //关闭定时器
scheduler.Shutdown(); Console.ReadKey();
}
catch (SchedulerException ex)
{
Console.WriteLine(ex);
}
}
}
}
F5运行,输出

上面只是Quartz.net的最简单的开启和关闭
下面添加一个执行任务,Quartz的任务也很简单,只需要让任务类继承并实现IJob接口
右击控制台应用程序添加一个类HelloJob.cs
using Quartz; namespace Quartz001
{
public class HelloJob:IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("我来自HelloJob任务");
}
}
}
然后对Program.cs代码做一些修改:
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl; namespace Quartz001
{
class Program
{ static void Main(string[] args)
{
//配置Common.Logging的日志输出为控制台的方式
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info }; try
{
//通过工厂得到Scheduler的一个实例
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //开启
scheduler.Start(); //使用JobBuilder合建一个任务并和我们的HelloJob绑定在一起(注意Job的Key-相当于唯一标识)
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build(); //任务触发器--StartNow()立即执行,执行间隔10s,一直执行
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds()
.RepeatForever())
.Build(); //告诉Quartz用上面的触发器去定时执行job
scheduler.ScheduleJob(job, trigger); Thread.Sleep(TimeSpan.FromSeconds()); //关闭定时器
scheduler.Shutdown();
}
catch (SchedulerException ex)
{
Console.WriteLine(ex);
} Console.WriteLine("按任意键退出!");
Console.ReadKey();
}
}
}
执行结果:

此时一个简单的定时任务就完成了
job任务里面,还可以通过JobDataMap往job中传递值
如新建一个DumbJob.cs任务
using Quartz; namespace Quartz001
{
public class DumbJob:IJob
{
public void Execute(IJobExecutionContext context)
{
JobKey key = context.JobDetail.Key; JobDataMap dataMap = context.JobDetail.JobDataMap; string jobSays = dataMap.GetString("jobSays");
float myFloatValue = dataMap.GetFloat("myFloatValue"); Console.Error.WriteLine("DumbJob的任务实例说:" + jobSays + "值是:" + myFloatValue);
}
}
}
修改Program.cs文件代码
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl; namespace Quartz001
{
class Program
{ static void Main(string[] args)
{
//配置Common.Logging的日志输出为控制台的方式
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info }; try
{
//通过工厂得到Scheduler的一个实例
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //开启
scheduler.Start(); //使用JobBuilder合建一个任务并和我们的HelloJob绑定在一起(注意Job的Key-相当于唯一标识)
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build(); //任务触发器--StartNow()立即执行,执行间隔10s,一直执行
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds()
.RepeatForever())
.Build(); IJobDetail dumbJob = JobBuilder.Create<DumbJob>()
.WithIdentity("myJob", "dumbGroup")
.UsingJobData("jobSays", "我是DumbJob,大家好!")
.UsingJobData("myFloatValue", 3.141f)
.Build();
//还可以使用下面的方式传递数据
//JobDataMap map = jobDetail.JobDataMap;
//map.Put("jobSays", "我是DumbJob,大家好!"); ITrigger dumbTrigger = TriggerBuilder.Create()
.StartNow()
.WithSimpleSchedule(x=>x.WithIntervalInSeconds().WithRepeatCount()) //3秒钟执行一次,执行3次(加上启动的一次,输出会有4次)
.Build(); //告诉Quartz用上面的触发器去定时执行job
scheduler.ScheduleJob(job, trigger);
scheduler.ScheduleJob(dumbJob, dumbTrigger); Thread.Sleep(TimeSpan.FromSeconds()); //关闭定时器
scheduler.Shutdown();
}
catch (SchedulerException ex)
{
Console.WriteLine(ex);
} Console.WriteLine("按任意键退出!");
Console.ReadKey();
}
}
}
输出结果:

学习参阅资料:
http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html
http://www.cnblogs.com/Raymond-YYC/p/3975378.html
http://www.cnblogs.com/monian/p/3822980.html
Quartz.net 2.x 学习笔记01的更多相关文章
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...
- xml基础学习笔记01
注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象.element应称作元素,毕竟这更符合英文的本意.至于标 ...
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...
- FPGA-VHDL课堂学习笔记*01
FPGA-VHDL课堂学习笔记 记录说明:本文档主要记录大学期间,老师FPGA授课课堂笔记. 代码语言:VHDL 编程软件:MAX+plus II FPGA硬件:FLE-843 03月05日 理论课 ...
随机推荐
- 一个Elasticsearch嵌套nested查询的实例
创建索引和数据准备 PUT course PUT course/_mapping/course { "properties": { "course":{ &qu ...
- 【转】XGBoost 与 Boosted Tree
XGBoost 与 Boosted Tree http://www.52cs.org/?p=429 作者:陈天奇,毕业于上海交通大学ACM班,现就读于华盛顿大学,从事大规模机器学习研究. 注解:tru ...
- D3.js学习笔记(三)——创建基于数据的SVG元素
目标 在这一章,你将会使用D3.js,基于我们的数据来把SVG元素添加到网页中.这一过程包括:把数据绑定到元素上,然后在使用这些元素来可视化我们的数据. 注意:不同于前几章,我们从一个完整的代码开始, ...
- python学习笔记(excel+unittest)
准备先利用之前整理的python自带的unittest框架 整合excel 实现接口自动化测试功能 先看看excel表格设置: 下来是对excel获取的代码: #!/usr/bin/env pytho ...
- appium自动化测试(三)
一. 层级定位和list 先通过find_element_by_XXX找到父级元素webelement,再通过webelement.find_element_by_XXX寻找子元素 二. 滑动屏幕 滑 ...
- HBase Cassandra比较
转自:http://itindex.net/detail/22338-cassandra-hbase-%E8%AE%BE%E8%AE%A1 Cassandra HBase 一致性 Quorum ...
- [eShopOnContainers 学习系列] - 03 - 在远程 Ubuntu 16.04 上配置开发环境
直接把 md 粘出来了,博客园的富文本编辑器换成 markdown,没啥效果呀 ,先凑合吧.实在不行换地方 # 在远程 Ubuntu 16.04 上配置开发环境 ## 零.因 为什么要用这么麻烦的 ...
- css11动态效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- react 学习文章
生命周期 学习笔记 一些坑 项目完成后总结 理解Immutable 是否要同构如何同构 react组件最佳实践 redux集合所有的state props来源, 页面所有状态 数据的唯一来源 reac ...
- 用百度地图API打造方便自己使用的手机地图
有钱人咱就不说了,因为偶是个穷银--因为穷,所以去年买的Huawei C8650+到现在还在上岗,对于没有钱买好的配置的手机的童鞋来说,类似于百度,谷歌,高德等商家的地图在自己的机器上跑起来确实是有点 ...