WebAPI中的定时任务详解-使用Quartz.Net
最近做WebAPI定时任务,网上搜了好多,发现对于小白来说并不太友好,Quartz.Net 2.X和3.X变化太大
整理一下自己做的一些体验 基于Quartz.Net 2.X
1.定时脚本
using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Threading.Tasks; using System.Web; namespace WF.BPM.WebAPI.Job { ////// 定时任务 /// public class JobScheduler { /// /// 分钟 /// public static int Minute = Convert.ToInt32(ConfigurationManager.AppSettings["Minute"]); /// /// 开始任务 /// /// public static void Start() { // 创建作业调度器 ISchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = factory.GetScheduler(); // 创建作业 IJobDetail job = JobBuilder.Create () .WithIdentity("SendSMSJob", "SendSMSJobGroup") .Build(); // 创建触发器,每3min执行一次 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("SendSMSTrigger", "SendSMSGroup") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(Minute) .RepeatForever()) .Build(); // 加入到作业调度器中 scheduler.ScheduleJob(job, trigger); scheduler.Start(); } } }
2.发送代码
////// 发送短信 /// public class SendSMSJob : IJob { /// /// 失败次数 /// public static int ErrorCount = Convert.ToInt32(ConfigurationManager.AppSettings["ErrorCount"]); public static int IsExecute = Convert.ToInt32(ConfigurationManager.AppSettings["IsExecute"]); string ConnectionString = ConfigurationManager.ConnectionStrings["K2SlnConnectionString"].ConnectionString; /// /// 执行方法 /// /// public void Execute(IJobExecutionContext context) { if (IsExecute == 1) { SendSMSBLL.MainSend(); } } }
3.加入到Global.asax
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; using WF.BPM.WebAPI.Job; namespace WF.BPM.WebAPI { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //注册定时任务 JobScheduler.Start(); } } }