c# .net framework 4.5.2 , Quartz.NET 3.0.7
参考了:https://www.cnblogs.com/personblog/p/11277527.html,
https://www.jianshu.com/p/b8e7e4deb60a
.NET MVC 中的示例:
ReportJob.cs
using Quartz; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace Quartz研究.MyJob.GetWxQdSubMchId { [DisallowConcurrentExecution] public class ReportJob : IJob { public Task Execute(IJobExecutionContext context) { return Task.Run(() => { foo(); }); } public void foo() { try { 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); } catch (Exception ex) { //日志 } } } }
--
ReportJobScheduler.cs
using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Quartz研究.MyJob.GetWxQdSubMchId { public class ReportJobScheduler { /// <summary> /// 创建计划任务 /// </summary> public static async void Start() { try { string thisJob = "ReportJob"; string groupName = "gp"+ thisJob; string jobName = "job" + thisJob; string triggerName = "trigger" + thisJob; // 创建作业调度池 ISchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = await factory.GetScheduler(); // 创建作业 IJobDetail job = JobBuilder.Create<ReportJob>() .WithIdentity(jobName, groupName) .Build(); // 创建触发器,每10s执行一次 ITrigger trigger = TriggerBuilder.Create() .WithIdentity(triggerName, groupName) .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); // 加入到作业调度池中 await scheduler.ScheduleJob(job, trigger); // 开始运行 await scheduler.Start(); } catch (Exception ex) { //日志 } } } }
--
Application_Start()
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace Quartz研究 { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { Quartz研究.MyJob.GetWxQdSubMchId.ReportJobScheduler.Start(); AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } }
如果在日志里遇到:
DEBUG 2022-06-28 12:31:55,332 708ms [5] JobRunShell Log - Trigger instruction : NoInstruction
DEBUG 2022-06-28 12:31:55,349 725ms [3] QuartzSchedulerThread Log - Batch acquisition of 0 triggers
DEBUG 2022-06-28 12:32:22,653 28028ms [3] QuartzSchedulerThread Log - Batch acquisition of 0 triggers
或是发现任务没启动。
不要在 ReportJobScheduler 类里写额外静态方法,把静态方法移走。
--