基於ASP.NET MVC(C#)和Quartz.Net組件實現的定時執行任務調度

來源:互聯網
上載者:User

標籤:作業調度   包管理器   identity   directory   reg   datetime   detail   highlight   ==   

在之前的文章《推薦一個簡單、輕量、功能非常強大的C#/ASP.NET定時任務執行管理器組件–FluentScheduler》和《簡單、輕量、功能非常強大的C#/ASP.NET定時調度任務執行管理組件–FluentScheduler之執行個體篇》中,我們認識和瞭解了FluentScheduler這款輕量的定時任務調度動作項目。今天再給大家介紹一款關於定時任務調度執行的組件–Quartz.NET,Quartz.Net是Java版Quartz的.NET實現。

相對FluentScheduler實現定時調度任務的使用簡單,配置少的特點,Quartz.Net則配置稍微複雜一些。下面我們就接合一個 ASP.NET MVC網站應用程式程式的定時執行任務調試的小執行個體來瞭解Quartz.Net的簡單用法,當然Webform的Web應用也是可以使用Quartz.Net 來作定時任務的。

首先,我們開啟Visual Studio 2015,建立一個ASP.NET MVC的Web應用程式項目,命名為QuartzNetMvcDemo:

然後通過封裝管理員控制台來安裝Quartz.Net組件:Install-Package Quartz

 

Quartz.Net一個最簡單任務至少包括三部分實現:job(作業),trigger(觸發器)以及scheduler(調度器)。其中job 是你需要在一個定時任務中具體執行的商務邏輯,trigger則規定job何時並按照何種規則執行,最終job和trigger會被註冊到 scheduler(調度器)中,scheduler負責協調job和trigger的運行。

在Quartz.Net中,一個job(作業)即為一個類,為了讓job能在Quartz.Net的體系中執行,我們必須實現Quartz.Net提供的IJob介面的Execute方法,如本例所實現的IJob介面ReportJob類:

using System;using Quartz;using System.IO; namespace QuartzNetMvcDemo{  public class ReportJob : IJob  {    public void Execute(IJobExecutionContext context)    {      var reportDirectory = string.Format("~/reports/{0}/", DateTime.Now.ToString("yyyy-MM"));      reportDirectory = System.Web.Hosting.HostingEnvironment.MapPath(reportDirectory);      if (!Directory.Exists(reportDirectory))      {        Directory.CreateDirectory(reportDirectory);      }      var dailyReportFullPath = string.Format("{0}report_{1}.log", reportDirectory, DateTime.Now.Day);      var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);      File.AppendAllText(dailyReportFullPath, logContent);    }  }}

Execute方法有一個IJobExecutionContext的介面對象作為參數,這個參數包含了定義這個類的job(作業)的配置資訊。當然,作為樣本,在本例中,我們沒有使用到這個參數。

接下來,我們需要實現一個trigge(觸發器),範例程式碼如下:

using Quartz;using Quartz.Impl; namespace QuartzNetMvcDemo{  public class ReportJobScheduler  {    public static void Start()    {      IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();      scheduler.Start();      IJobDetail job = JobBuilder.Create<ReportJob>().Build();      ITrigger trigger = TriggerBuilder.Create()        .WithIdentity("triggerName", "groupName")        .WithSimpleSchedule(t =>          t.WithIntervalInSeconds(5)           .RepeatForever())           .Build();       scheduler.ScheduleJob(job, trigger);    }  }}

 

這個程式碼片段你可以放在你項目程式的任何可以被調用的地方,類名你也可以隨意取,這沒有什麼關係的。只要在使用這個類時正確引用即可。

在代碼中,我們使用StdSchedulerFactory.GetDefaultScheduler()建立了一個scheduler(調度器) 並隨之 啟動了這個調度器,然後建立了一個簡單的Quartz.Net觸發器並對這個觸發器進行了一些配置:指定了觸發器的名稱為triggerName,觸發器 的分組為groupName,指定每5秒觸發一次並一直迴圈觸發。最後通過scheduler.ScheduleJob()方法把job(作業)和 trigger(觸發器)註冊到了調度器中,這樣一個完整的定時任務就定製完成了。

最後,我們還要做的一件事情就是啟動我們定製好的定時任務,我們把這個任務放到項目程式的全域cs檔案(Global.asax)的Application_Start方法中來執行:

 1 using System.Web.Mvc; 2 using System.Web.Optimization; 3 using System.Web.Routing; 4   5 namespace QuartzNetMvcDemo 6 { 7   public class MvcApplication : System.Web.HttpApplication 8   { 9     protected void Application_Start()10     {11       AreaRegistration.RegisterAllAreas();12       FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);13       RouteConfig.RegisterRoutes(RouteTable.Routes);14       BundleConfig.RegisterBundles(BundleTable.Bundles);15        16       //啟動定時任務17       ReportJobScheduler.Start();18     }19   }20 }

 

好了,現在所有的操作都已完成,按下F5運行我們的ASP.NET MVC定時任務調度執行樣本程式。過一分鐘去開啟我們的記錄檔,如果程式正常運行,那麼你將看到如下的日誌

怎麼樣,Quartz.Net實現的定時執行任務調度是不是也比較簡單呢?當然,這隻是Quartz.Net的簡單樣本,Quartz.Net還有許多更進階的功能,如支援設定檔的作業調度,支援cron的作業周期等

基於ASP.NET MVC(C#)和Quartz.Net組件實現的定時執行任務調度

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.