這次由於項目的需求:什麼定時發送郵件通知,定時篩選取消客戶下單未支付的訂單 重新撿起定時器,在網上翻來找去找到 Quartz.Net老字型大小了並不表示它就真的老了哦 github:https://github.com/quartznet/quartznet 當然介紹的園子里文章很多跟官方文檔https ...
這次由於項目的需求:什麼定時發送郵件通知,定時篩選取消客戶下單未支付的訂單
重新撿起定時器,在網上翻來找去找到----Quartz.Net老字型大小了並不表示它就真的老了哦
github:https://github.com/quartznet/quartznet
當然介紹的園子里文章很多跟官方文檔https://www.quartz-scheduler.net介紹的都挺清楚的!用起來很簡便!
so!接下來我簡單介紹一下Quartz.Net框架設計 下圖借用園友的應該不會介意
園子中搜索發現已經有同學去實踐了,這裡引用一下各位大大的博文地址(應該不會介意,嘻嘻),大家也可以參考學習:
http://www.cnblogs.com/knowledgesea/p/5145239.html Quartz.net持久化與集群部署開發詳解
http://www.cnblogs.com/mushroom/p/4231642.html#3760225 Net作業調度(四)—quartz.net持久化和集群
http://www.cnblogs.com/lanxiaoke/p/6629481.html 任務調度之持久化(基於Quartz.net)
http://www.cnblogs.com/lanxiaoke/p/6637714.html 任務調度之集群(基於Quartz.net)
http://www.cnblogs.com/huangxincheng/p/6916246.html 使用sqlserver搭建高可用雙機熱備的Quartz集群部署【附源碼】
在此博主自己將Quartz.net的所需類目做了一次整合,大伙可以瞅瞅
1 using Quartz; 2 using Quartz.Impl; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 using Wshelper.Caching; 9 using Wshelper.Logging; 10 11 namespace Commons.Helpers 12 { 13 public class QuartzHelper 14 { 15 /// <summary> 16 /// 時間間隔執行任務 17 /// </summary> 18 /// <typeparam name="T">任務類,必須實現IJob介面</typeparam> 19 /// <param name="seconds">時間間隔(單位:毫秒)</param> 20 public static void ExecuteInterval<T>(int seconds) where T : IJob 21 { 22 ISchedulerFactory factory = new StdSchedulerFactory(); 23 IScheduler scheduler = factory.GetScheduler(); 24 25 //IJobDetail job = JobBuilder.Create<T>().WithIdentity("job1", "group1").Build(); 26 IJobDetail job = JobBuilder.Create<T>().Build(); 27 28 ITrigger trigger = TriggerBuilder.Create() 29 .StartNow() 30 .WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever()) 31 .Build(); 32 33 scheduler.ScheduleJob(job, trigger); 34 35 scheduler.Start(); 36 } 37 /// <summary> 38 /// 指定時間執行任務 39 /// </summary> 40 /// <typeparam name="T">任務類,必須實現IJob介面</typeparam> 41 /// <param name="cronExpression">cron表達式,即指定時間點的表達式</param> 42 public static void ExecuteByCron<T>(string cronExpression) where T : IJob 43 { 44 ISchedulerFactory factory = new StdSchedulerFactory(); 45 IScheduler scheduler = factory.GetScheduler(); 46 47 IJobDetail job = JobBuilder.Create<T>().Build(); 48 49 //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); 50 //DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3); 51 52 ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() 53 //.StartAt(startTime).EndAt(endTime) 54 .WithCronSchedule(cronExpression) 55 .Build(); 56 57 scheduler.ScheduleJob(job, trigger); 58 59 scheduler.Start(); 60 61 //Thread.Sleep(TimeSpan.FromDays(2)); 62 //scheduler.Shutdown(); 63 } 64 } 65 66 #region 任務執行例 67 public class MyJob : IJob 68 { 69 ILogger logger = LoggerFactory.CreateLog(); 70 public void Execute(IJobExecutionContext context) 71 { 72 //向c:\Quartz.txt寫入當前時間並換行 73 //System.IO.File.AppendAllText(@"c:\Quartz.txt", DateTime.Now + Environment.NewLine); 74 ICache cache = new MemoryCacheFactory().Create(); 75 cache.Clear(); 76 logger.Info("時間:" + DateTime.Now.ToString() + "---------系統自動更新緩存!"); 77 } 78 } 79 #endregion 80 }View Code
啟動:
1 public static void QuartzHelp() 2 { 3 //#region Quartz調度任務 4 string cronExpression = "1 0 0 * * ? "; //這是指每天的0點執行任務 5 QuartzHelper.ExecuteByCron<MyJob>(cronExpression); //這是調用Cron計劃方法 6 //#endregion 7 }View Code
Quartz.Net 作者已經更新了支持.net standrad2.0了,就意味著可以在.net core平臺使用了,下載地址:https://www.nuget.org/packages/Quartz/3.0.0-beta1,更新說明地址:https://www.quartz-scheduler.net/2017/10/08/quartznet-3.0-beta1-released.html,相信不久之後就會發佈release版本,屆時.net core框架開發就不怕沒有定時器的支持了,~( ̄▽ ̄~)(~ ̄▽ ̄)~