作业调度框架 Quartz.NET 2.0 StepByStep
注:目前网上诸多介绍Quartz.net的文章,甚至Quartz.net官网上的Tutorial都是1.0版本的,而这个项目在2.0版本对项目进行了比较大规模的修改,使得原有的很多例子都不能运行,故写此文。由于本人是边学边用,加之技术写作水平皆有限,错误自然难免,望轻拍,我将不定时更新完善此贴,希望能为需要的朋友提供帮助。
现今的系统,业务数据是越来越大,传统的同步处理方式有时候已经不能满足用户需求,定时后台服务这种异步数据处理形式则逐渐被大家接受。相信大家在平时的工作中也经常遇到数据同步,或是定时邮件,短信提醒等需求,Quartz.net(官网 http://quartznet.sourceforge.net/)可以很好满足对多个windows服务的管理及监控,同时在保证开发简单的情况下不失灵活,是非常优秀的作业调度框架。
和其他绝大多数开源项目一样Quartz.net也包含了其他几个优秀的开源项目:
核心 ----Common.Logging(通用日志接口)
----C5(泛型集合类)
示例程序
----log4net(日志记录-通用日志接口实现)
----topshelf(跨平台服务宿主程序)
Quartz.net使用的许可是Apache License,商业友好,使用者可以修改源码用于开源或商业项目,只需包含许可及修改说明。
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的更多相关文章
- 作业调度框架Quartz.NET | 大专栏
原文:作业调度框架Quartz.NET | 大专栏 作业调度框架Quartz.NET 发表于 2019-09-28 | 分类于 前端 | 没有评论 前言 任务调度系统并不是完美的,它会出现任务执行 ...
- 作业调度框架Quartz.NET-现学现用-02-任务监听
原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...
- 作业调度框架Quartz.NET-现学现用-01-快速入门
原文:作业调度框架Quartz.NET-现学现用-01-快速入门 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预的任务在执 ...
- 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书
原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ...
- 作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书
原文:作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预 ...
- .Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- (转).Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- java作业调度框架Quartz
在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点.每周的周日.每个月的15号,Apache Quartz就是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间 ...
- .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练
一.课程介绍 明人不说暗话,跟着阿笨一起玩NET .本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享 ...
随机推荐
- Random的用法
import java.util.Random; public class RandomTest { public static void main(String[] args) { Random r ...
- ZOJ2929 Penalty Kick(概率)
题目挺水的,但由于其独特的阅读量比赛的时候没发现这道水题,在此做一下翻译,如果有人搜到这翻译的话有帮助的话自然最好啦. 中国队平局进入最后的点球决胜局,首先抛硬币决定谁先罚球,然后先是罚五球,如果罚的 ...
- POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)
思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...
- POJ 1658
#include<iostream>//cheng da cai zi using namespace std; int main() { int i; int time; ]; cin& ...
- .bash_profile和.bashrc的区别(如何设置生效)
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...
- Xamarin for Mac 2.0.2.35 稳定版 破解补丁 Preview 2
注意:该破解补丁未经过广泛测试 前提概要 1.该补丁,仅涉及以下产品,所有版权归 Xamarin 所有,仅供学习练手: ① Xamarin.iOS 8.10.2.37 Xamarin.iOS 8.10 ...
- HTTP常用的状态码
一.200状态码: 成功2××:成功处理了请求的状态码. 1.200 :服务器已成功处理了请求并提供了请求的网页. 2.204:服务器成功处理了请求,但没有返回任何内容. 二.300状态码: 重定向3 ...
- 更改cmd代码页,修正语言显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 rem 英文 chcp 437 rem 日文 chcp 932 rem 简体中文 chcp 936 re ...
- char[] 操作
字符串的初始化方法1.char str[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };2.char str[10] = "Hello"; ch ...
- iOS:核心动画之基本动画CABasicAnimation
基本动画,是CAPropertyAnimation的子类 属性说明: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 动画过程说明: 随着动画的进行 ...