1、建立MVC專案(StudyQuartz),如下圖顯示
2、mvc專案安裝Quartz庫,有兩種方式
1)透過“程式包管理控制檯”(檢視-->其他視窗-->程式包管理器)
輸入“Install-Package Quartz” 完成安裝
2)透過NuGet包管理器
在瀏覽輸入“Quartz”,下載最新版本到專案中
3、利用Quartz實現定時排程Demo
1)建立Job資料夾,建立MyJob.css 和QuartzScheduler.css
2)MyJob檔案,原始碼如下
using Quartz; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Web; namespace StudyQuartz.Job { public class MyJob : IJob { public MyJob() { } public Task Execute(IJobExecutionContext context) { // 你的任務邏輯 // Console.WriteLine("作業執行: " + DateTime.Now.ToString("r")); Debug.WriteLine("作業執行: " + DateTime.Now.ToString("r")); return Task.CompletedTask; } } }
2)QuartzScheduler.css,原始碼如下:
using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace StudyQuartz.Job { public static class QuartzScheduler { public static void StartScheduler() { // 建立作業和觸發器 IJobDetail job = JobBuilder.Create<MyJob>() .WithIdentity("myJob", "group1") .Build(); // 使用Quartz Cron表示式設定觸發器 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .WithCronSchedule("0/10 * * * * ?") // 每10秒執行一次 .Build(); // 建立排程器 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; // 安排作業 scheduler.ScheduleJob(job, trigger); // 啟動排程器 scheduler.Start(); } } }
3)在Global.asax,加入QuartzScheduler的註冊
using StudyQuartz.Job; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace StudyQuartz { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //QuartzScheduler註冊 QuartzScheduler.StartScheduler(); } } }
4、執行專案,在“輸出”控制檯,檢視效果
注意:mvc是應用程式,如果要輸出列印資訊,使用 Debug.WriteLine("作業執行: " + DateTime.Now.ToString("r")),若是控制檯,使用Console.WriteLine("作業執行: " + DateTime.Now.ToString("r"));