系列目錄
前言
我從Quartz2.0開始使用,並對其進行了封裝了界面,可以參考 http://www.cnblogs.com/ymnets/p/5065154.html
最近拿出來進行了優化,並升級到最新版,溫故而知新嘛
當初教程較少,並且是英文,現在很多地方都有中文的教程也是學習起來事半功倍
Quartz能實現什麼?
他類似於SQL Server的代理與Timer定時器:
1.指定時間執行一條SQL語句或存儲過程
2.指定時間發送郵件(執行一個C#方法)
3.有規律的定時執行想要做的事情(通過配置Cron表達式來實現),如:每個星期1,3,5給用戶發送一條短信
4.作業任務他可以被暫停,掛起,停止
5.作業任務可以遠程被操作管理,數據庫保存(支持多種數據庫包括:SqlServer,Sqlite,Oracle,Mysql,Firebird)
使用方法
從Nuget包直接安裝即可
PM>Install-Package Quartz
簡單的實現
我們新建一個控制檯程序,並安裝Quartz包
入口代碼:
using Quartz; using Quartz.Impl; using System; namespace QuartzTest { class Program { static void Main(string[] args) { // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = sf.GetScheduler(); IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("job1", "group21") .Build(); //什麼時候開始執行 DateTime runTime = DateTime.Now; ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartAt(runTime) .WithSimpleSchedule(x => x .WithIntervalInSeconds(1) //1秒一次真男人 .RepeatForever())//無限循環 .Build(); sched.ScheduleJob(job, trigger); //啓動任務 sched.Start(); } } }
using Quartz; using System; using System.Threading.Tasks; namespace QuartzTest { /// <summary> /// This is just a simple job that says "Hello" to the world. /// </summary> /// <author>Bill Kratzer</author> /// <author>Marko Lahma (.NET)</author> public class HelloJob : IJob { /// <summary> /// Called by the <see cref="IScheduler" /> when a /// <see cref="ITrigger" /> fires that is associated with /// the <see cref="IJob" />. /// </summary> public void Execute(IJobExecutionContext context) { Console.WriteLine("Hello Quartz"); // Say Hello to the World and display the date/time } } }
運行結果:
您也可以用表達式的形式來運行:
ITrigger trigger2 = TriggerBuilder.Create() .WithIdentity("trigger2", "group1") .StartAt(runTime) .WithCronSchedule("/1 * * ? * *") //時間表達式,1秒一次 .Build(); sched.ScheduleJob(job, trigger2);
效果也是一樣的!
下面我們來看一個類圖:
這個類圖描述了,Quartz運行的基本原理
如何學習其表達式
我們無需要刻意去背誦他表達式的含義http://cron.qqe2.com/ 界面展示的配置
可以通過界面的操作來看到生成表達式,使用幾次就很少明白。
後臺封裝成界面,更加無需要去記得表達式,通過界面的配置即可
當然你需要知道字符代表的意思,如:*,?等符號,跟通配符有點類似,可以百度
注:實際上我們後面要做的功能也是基於這種界面,然後手選後將生成的表達式作爲運行的定時器而已
總結
Quartz比Timer定時器好用多了,定時器還要部署windows任務
1.HelloJob集成了類圖中所示的IJob接口並實現了void Execute(IJobExecutionContext context);方法,這是必須的!
2.由StdSchedulerFactory.GetDefaultScheduler();來獲得一個調度器
3.把任務加入到觸發器
4.開啓任務,自動跑起來
官方鏈接:
Quartz.Net官方2.X教程 http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html
Quartz.Net源代碼 https://github.com/quartznet/quartznet
文章代碼:
鏈接:http://pan.baidu.com/s/1pKP6c2Z 密碼:dudi