:目前网上诸多介绍Quartz.net的文章,甚至Quartz.net官网上的Tutorial都是1.0版本的,而这个项目在2.0版本对项目进行了比较大规模的修改,使得原有的很多例子都不能运行,故写此文。由于本人是边学边用,加之技术写作水平皆有限,错误自然难免,望轻拍,我将不定时更新完善此贴,希望能为需要的朋友提供帮助。

1. 项目介绍

现今的系统,业务数据是越来越大,传统的同步处理方式有时候已经不能满足用户需求,定时后台服务这种异步数据处理形式则逐渐被大家接受。相信大家在平时的工作中也经常遇到数据同步,或是定时邮件,短信提醒等需求,Quartz.net(官网 http://quartznet.sourceforge.net/)可以很好满足对多个windows服务的管理及监控,同时在保证开发简单的情况下不失灵活,是非常优秀的作业调度框架。

和其他绝大多数开源项目一样Quartz.net也包含了其他几个优秀的开源项目:

核心   ----Common.Logging(通用日志接口)

----C5(泛型集合类)

示例程序

----log4net(日志记录-通用日志接口实现)

----topshelf(跨平台服务宿主程序)

Quartz.net使用的许可是Apache License,商业友好,使用者可以修改源码用于开源或商业项目,只需包含许可及修改说明。

2. Quartz.net开发思路
 
  我们来了解下Quartz.net中常用的几个概念:

Scheduler  ---------主调度程序 --------- Quartz核心

Job        ---------作业  --------- 服务要做的(业务操作)

Trigger     ---------触发器  --------- 服务执行条件(何时执行操作)

Listener    ---------事件监听器  --------- 执行期事件(Job执行前后/ Scheduler启动终止暂停时应该做什么,可以挂一些特定事件)

了解了这些概念之后,我们就可以组合这些概念并整理出开发的思路:

先利用SchedulerFactory构建一个Scheduler,启动Scheduler,之后构建Job和Trigger,若有作业监听需求,在Listener上添加相应的处理程序,再将Job和Trigger关联后放入Scheduler

3. Quartz.net的简单使用

1. 新建一个控制台程序,引用Quartz.dll和Common.Logging.dll

2. 新建一个类,命名为SampleJob,继承并实现接口Quartz.IJob

public class SampleJob : IJob     {         public void Execute(IJobExecutionContext context)         {             File.AppendAllText("C:\\Quartz.txt", "SampleJob Is Run");             File.AppendAllText("C:\\Quartz.txt", Environment.NewLine);           }     }

3.在Program.cs的main方法中写如下代码后运行这个控制台会程序会发现已经SampleJob中的Execute方法已经执行

  ISchedulerFactory  factory = new StdSchedulerFactory();             IScheduler scheduler = factory.GetScheduler();             scheduler.Start();             IJobDetail job = JobBuilder.Create<SampleJob>().WithIdentity("SampleJob", "JobGroup1").Build();             ITrigger trigger = TriggerBuilder.Create().StartNow().Build();             scheduler.ScheduleJob(job, trigger);

4. 使用topshelf创建WINDOWS服务

此部分张善友同学已经写过 (http://www.cnblogs.com/shanyou/archive/2011/05/04/2037008.html),此节为保证思路连贯,简单介绍并引用部分代码

也许有的网友会疑问,以控制台程序作为服务宿主还没有意义的,这时轮到Topshelf出场了, 使用它可以很方便的构建跨平台服务寄主,而在调试时直接以控制台的形式运行即可,非常方便。 我们引入topshelf.dll及 log4net.dll(topshelf需要),将之前main中代码放到服务类里,把main方法变为Host构建

服务类代码:

  public class SampleService     {         ISchedulerFactory factory;         IScheduler scheduler;         public void Start()         {             File.AppendAllText("C:\\Quartz.txt", "SampleService Is Run");             File.AppendAllText("C:\\Quartz.txt", Environment.NewLine);             factory = new StdSchedulerFactory();             scheduler = factory.GetScheduler();             scheduler.Start();             IJobDetail job = JobBuilder.Create<SampleJob>().WithIdentity("SampleJob", "JobGroup1").Build();             ITrigger trigger = TriggerBuilder.Create().StartNow().Build();                       scheduler.ScheduleJob(job, trigger);         }         public void Stop()         {             scheduler.Clear();             File.AppendAllText("C:\\Quartz.txt", "SampleService Is Stop");             File.AppendAllText("C:\\Quartz.txt", Environment.NewLine);         }     }

修改后的Main代码

        static void Main(string[] args)         {             var host = HostFactory.New(x =>             {                 x.EnableDashboard(); x.Service<SampleService>(s => {     s.SetServiceName("SampleService"); s.ConstructUsing(name => new SampleService());     s.WhenStarted(tc => { tc.Start(); });     s.WhenStopped(tc => tc.Stop()); });                 x.RunAsLocalSystem();                 x.SetDescription("SampleService Description");                 x.SetDisplayName("SampleService");                 x.SetServiceName("SampleService");             });             host.Run();
}

编译后,cmd进到exe所在目录,并执行"项目名.exe install/uninstall" 完成服务的安装与卸载

作业调度框架 Quartz.NET 2.0 StepByStep的更多相关文章

  1. 作业调度框架Quartz.NET | 大专栏

    原文:作业调度框架Quartz.NET | 大专栏 作业调度框架Quartz.NET 发表于 2019-09-28 |  分类于 前端 |  没有评论 前言 任务调度系统并不是完美的,它会出现任务执行 ...

  2. 作业调度框架Quartz.NET-现学现用-02-任务监听

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...

  3. 作业调度框架Quartz.NET-现学现用-01-快速入门

    原文:作业调度框架Quartz.NET-现学现用-01-快速入门 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预的任务在执 ...

  4. 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ...

  5. 作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书

    原文:作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预 ...

  6. .Net平台开源作业调度框架Quartz.Net

    Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...

  7. (转).Net平台开源作业调度框架Quartz.Net

    Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...

  8. java作业调度框架Quartz

    在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点.每周的周日.每个月的15号,Apache Quartz就是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间 ...

  9. .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练

    一.课程介绍 明人不说暗话,跟着阿笨一起玩NET .本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享 ...

随机推荐

  1. UNITY_MATRIX_IT_MV[Matrix] (转载)

    转载 http://blog.csdn.net/cubesky/article/details/38682975 前面发了一篇关于unity Matrix的文章. http://blog.csdn.n ...

  2. SWF Web播放器

    <HTML> <HEAD> <!-- saved from url=(0013)about:internet --> <TITLE> Untitled. ...

  3. jmeter学习预热

    对jmeter有些兴趣,最近想抽点时间熟悉下,个人熟悉某个工具的方法: 1.官网http://jmeter.apache.org/,一般官网会有Tutorials或者Getting Started之类 ...

  4. 作品展示,JavaScript 版水果忍者

    点这里 <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 R ...

  5. 《Thinking in C++》学习笔记(二)【第三章】

    第三章 C++中的C 3.4.4 指针简介 ‘&’运算符:只要在标识符前加上‘&’,就会得出标识符的地址. C和C++有一个专门存放地址的变量类型.这个变量类型叫做指针(pointer ...

  6. JS中的this好神奇,都把我弄晕了

    一.this的常见判断: 1.函数预编译过程 this —> window 2.全局作用域里 this —> window 3.call/apply 可以改变函数运行时this指向 4.o ...

  7. maven依赖的全局排除

    今天遇到要全局排除一个maven依赖,因为Maven本身没有全局排除依赖的办法, 参考了同事人英写的一篇博文(可以看这里http://my.oschina.net/liuyongpo/blog/177 ...

  8. http://blog.163.com/zhangmihuo_2007/blog/static/27011075201392685751232/

    http://blog.163.com/zhangmihuo_2007/blog/static/27011075201392685751232/

  9. hdu2025查找最大元素

    #include<iostream> #include<stdio.h> #include<math.h> #include<stdlib.h> #in ...

  10. C#遍历打印机

    #region 获取本机默认打印机名称 ArrayList al1=new ArrayLIst(); private static PrintDocument fPrintDocument = new ...