Quartz.Net 入门
Quartz.Net用于定时执行某些任务,系统中的发送邮件,电商平台促销活动等。
实现方式,在window service中通过Quartz.net控制任务的执行和调度。
在Nuget中安装Quartz : Install-Package Quartz
以下记录主要实现代码:
1.创建定时执行的任务
定义一个类,实现IJob接口 新建UpdatecadJob.cs
1 public class UpdatecadJob : IJob 2 { 3 string LocalFilePath = ConfigurationManager.AppSettings["LocalFilePath"]; //CAD文件存储路径 4 public async Task Execute(IJobExecutionContext context) 5 { 6 try 7 { 8 await Task.Run(() => UpdatecadJobFun()); 9 } 10 catch (Exception ex) 11 { 12 LogHelper.WriteLogs("定时更新cad出错:" + ex.Message); 13 throw ex; 14 } 15 } 16 public void UpdatecadJobFun() 17 { 18 LogHelper.WriteLogs("这是定时任务:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 19 } 20 21 } 22
2.创建一个任务对象
用于对任务进行分组
job = Quartz.JobBuilder.Create<UpdatecadJob>().Build();
3.创建一个触发器
用于定义执行任务的间隔时间
1 trigger = TriggerBuilder.Create() 2 .WithIdentity("TimeTrigger", "TimeGroup") 3 .WithSimpleSchedule(t => t.WithIntervalInHours(1).RepeatForever()) 4 .Build(); 5
4.创建一个调度器 用于添加一组或多组的(任务与触发器)
scheduler.ScheduleJob(job, trigger);
5.开启或结束任务
scheduler.Start();
完整代码如下:
新建JobScheduler类,通过构造函数初始化调度器工厂,通过start方法开启定时任务。
1 //后台执行任务 2 public class JobScheduler 3 { 4 //调度器工厂 5 private static readonly ISchedulerFactory factory = null; 6 //调度器 7 private static readonly IScheduler scheduler = null; 8 static JobScheduler() 9 { 10 11 //创建一个工厂 12 factory = new StdSchedulerFactory(); 13 scheduler = factory.GetScheduler().Result; 14 scheduler.Start(); 15 } 16 public static void Start() 17 { 18 scheduler.GetJobGroupNames(); 19 IJobDetail job; 20 ITrigger trigger; 21 //创建任务 22 job = Quartz.JobBuilder.Create<UpdatecadJob>().Build(); 23 //创建触发器 这里设置一小时 24 trigger = TriggerBuilder.Create() 25 .WithIdentity("TimeTrigger", "TimeGroup") 26 .WithSimpleSchedule(t => t.WithIntervalInHours(1).RepeatForever()) 27 .Build(); 28 //添加任务及触发器至调度器中 29 scheduler.ScheduleJob(job, trigger); 30 //启动 31 scheduler.Start(); 32 } 33 }
调用:
JobScheduler.Start();
后记:可视化界面和cron定时表达式尚未详细说明