<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      前言:

      ? ?你曾經(jīng)需要應(yīng)用執(zhí)行一個(gè)任務(wù)嗎?比如現(xiàn)在有一個(gè)需求,需要每天在零點(diǎn)定時(shí)執(zhí)行一些操作,那應(yīng)該怎樣操作呢?



      ? ?這個(gè)時(shí)候,如果你和你的團(tuán)隊(duì)是用.NET編程的話,可以考慮使用Quartz.NET調(diào)度器。允許開發(fā)人員根據(jù)日期
      間隔來實(shí)現(xiàn)任務(wù)調(diào)度任務(wù)。非常適合在平時(shí)的工作中,定時(shí)輪詢數(shù)據(jù)庫同步,定時(shí)郵件通知,定時(shí)處理數(shù)據(jù)等。

      ? ?Quartz一個(gè)開源的作業(yè)調(diào)度框架,是OpenSymphony?的?Quartz API的.NET移植每隔
      ,基于C#寫成,可應(yīng)用于winform、asp.net、asp.net core應(yīng)用中。提供了巨大的靈活性,是一個(gè)更為強(qiáng)大,方便管理,集群部署的作業(yè)調(diào)度框架。

      所以,有時(shí)候項(xiàng)目需要在不同時(shí)刻,執(zhí)行一個(gè)或很多個(gè)不同的作業(yè),你可以用它來完成執(zhí)行創(chuàng)建簡單或復(fù)雜的任務(wù)調(diào)度。

      導(dǎo)圖:



      特性:

      1:支持集群,作業(yè)分組,作業(yè)遠(yuǎn)程管理。?

      2:自定義精細(xì)的時(shí)間觸發(fā)器,使用簡單,作業(yè)和觸發(fā)分離。

      3:數(shù)據(jù)庫支持,可以寄宿Windows服務(wù),WebSite,winform等。

      概念:

      Scheduler? ? ? ? 作業(yè)調(diào)度器



      所有的scheduler都應(yīng)該由SchedulerFactory來創(chuàng)建
      //創(chuàng)建scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
      IJob? ? ? ? ? ? ?作業(yè)接口,繼承并實(shí)現(xiàn)Execute,?編寫執(zhí)行的具體作業(yè)邏輯。



      通過實(shí)現(xiàn)IJob接口來使你的.NET組件可以很簡單地被scheduler執(zhí)行
      public class ConsoleJob : IJob { public Task Execute(IJobExecutionContext
      context) {return Console.Out.WriteLineAsync($"執(zhí)行作業(yè)"); } }
      JobBuilder? ? ? ?根據(jù)設(shè)置,生成一個(gè)詳細(xì)作業(yè)信息(JobDetail)。


      JobBuilder是一個(gè)建造者模式,鏈?zhǔn)浇ㄔ?。通過靜態(tài)方法構(gòu)建一個(gè)JobBuilder實(shí)例,然后再調(diào)用類方法Build()創(chuàng)建一個(gè)IJobDetail的實(shí)現(xiàn)。
      public static JobBuilder Create(Type jobType) { JobBuilder b = new
      JobBuilder(); b.OfType(jobType);return b; }
      TriggerBuilder? ?根據(jù)規(guī)則,生產(chǎn)對(duì)應(yīng)的Trigger,觸發(fā)器可以規(guī)劃執(zhí)行任務(wù)



      ?

      通過靜態(tài)方法構(gòu)建一個(gè)TriggerBuilder實(shí)例,然后再調(diào)用類方法Build()創(chuàng)建一個(gè)ITrigger的實(shí)現(xiàn)。
      public static TriggerBuilder Create() { return new TriggerBuilder(); }
      ?根據(jù)任務(wù)設(shè)置觸發(fā)的開始時(shí)間和結(jié)束時(shí)間
      /// <summary> /// 開始時(shí)間 /// </summary> /// <param name="startTimeUtc"></param>
      /// <returns></returns> public TriggerBuilder StartAt(DateTimeOffset
      startTimeUtc) { startTime= startTimeUtc; return this; } /// <summary> /// 結(jié)束時(shí)間
      /// </summary> /// <param name="endTimeUtc"></param> /// <returns></returns>
      public TriggerBuilder EndAt(DateTimeOffset? endTimeUtc) { endTime = endTimeUtc;
      return this; }
      步驟:



      1、創(chuàng)建一個(gè)ISchedulerFactory,然后并且獲取 Scheduler

      2、啟動(dòng) Scheduler

      3、創(chuàng)建 job 任務(wù)

      4、創(chuàng)建 trigger 觸發(fā)器

      5、使用觸發(fā)器規(guī)劃執(zhí)行任務(wù)

      開始:

      注意:

      新建一個(gè)Quartz項(xiàng)目后,需要安裝下面的程序包:

      你可以用控制臺(tái)命令的方式安裝
      Install-Package Quartz
      也可以使用下面這種方式選擇安裝版本



      一、創(chuàng)建一個(gè)scheduler的引用:
      ISchedulerFactory schedFact = new StdSchedulerFactory(); IScheduler sched =
      await schedFact.GetScheduler();
      二、啟動(dòng) scheduler:
      await sched.Start();
      三、實(shí)現(xiàn)IJob:

      ConsoleJob.cs 實(shí)現(xiàn)IJob,在Execute方法里編寫要處理的業(yè)務(wù)邏輯,系統(tǒng)就會(huì)按照Quartz的配置,定時(shí)處理
      /// <summary> /// 實(shí)現(xiàn)IJob,Execute方法里編寫要處理的業(yè)務(wù)邏輯 /// </summary> public class
      ConsoleJob : IJob {public Task Execute(IJobExecutionContext context) { return
      Console.Out.WriteLineAsync($"ConsoleJob執(zhí)行工作
      在當(dāng)前時(shí)間{DateTime.Now}--上一次執(zhí)行時(shí)間:{DateTime.Now.AddSeconds(-5)}"); } }
      四、創(chuàng)建trigger:(建立一個(gè)某個(gè)時(shí)間點(diǎn)的觸發(fā)器,并且每5秒執(zhí)行一次)
      ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1")
      //觸發(fā)器 組 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
      .Build();
      五、觸發(fā)器執(zhí)行任務(wù):
      await sched.ScheduleJob(job, trigger);
      將幾個(gè)步驟整合后代碼如下:
      /// <summary> /// 任務(wù)調(diào)度的使用過程 /// </summary> /// <returns></returns> public async
      static Task Run() { // 1.創(chuàng)建scheduler的引用 ISchedulerFactory schedFact = new
      StdSchedulerFactory(); IScheduler sched= await schedFact.GetScheduler(); //2.啟動(dòng)
      scheduler await sched.Start(); // 3.創(chuàng)建 job IJobDetail job =
      JobBuilder.Create<ConsoleJob>() .WithIdentity("job1", "group1") .Build(); //
      4.創(chuàng)建 trigger (創(chuàng)建 trigger 觸發(fā)器) ITrigger trigger = TriggerBuilder.Create()
      .WithIdentity("trigger1", "group1") //觸發(fā)器 組 .WithSimpleSchedule(x =>
      x.WithIntervalInSeconds(5).RepeatForever()) .Build(); // 5.使用trigger規(guī)劃執(zhí)行任務(wù)job
      (使用觸發(fā)器規(guī)劃執(zhí)行任務(wù)) await sched.ScheduleJob(job, trigger); }
      運(yùn)行:

      間隔5秒執(zhí)行一次后的效果:



      附加:

      這里使用的quartz為3.x 版本,整個(gè)版本相對(duì)于2.0版本進(jìn)行了大量的修改,正式支持了.NET Core 和async/await

      引用張隊(duì) <https://www.cnblogs.com/shanyou/p/8269641.html>文章的內(nèi)容:



      總結(jié):

      1.其實(shí)在實(shí)際項(xiàng)目中,可以將上面的方法進(jìn)行封裝處理,形成不同的任務(wù),特別是處理多任務(wù)的時(shí)候,在不同的job中調(diào)用不同的trigger,后續(xù)會(huì)繼續(xù)完善開發(fā)

      2.quartz還有更多的用法,可以參考資料:Quartz.Net官方文檔 <https://www.quartz-scheduler.net/>? ?和??
      Quartz.Net開源地址 <https://github.com/quartznet/quartznet>

      3.項(xiàng)目源碼地址 <https://files-cdn.cnblogs.com/files/i3yuan/ConsoleQuartz.rar>

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          一亚洲精品色视频 | 深夜久久AAAAA级毛片免费看 | 成人免费AA片 | 不知火舞乳液狂飙 | 簧片免费视频 | 97人人澡人人爽人人模亚洲 | 免费看男人添女人无遮挡 | 寡妇高潮的味道 | www.成人在线观看 | 骚逼少妇|