C#-Windows服务+Quartz定时任务

2021-01-20 13:13

阅读:534

标签:settings   task   tin   理想   evel   ati   div   async   shu   

      Windows服务中,因为需要精确到特定时间执行,用Quartz代替定时器Timer。
      顺便一提,Quartz如果在网页的项目中使用,Quartz会因为网页的关闭而停止,所以和Windows服务搭配较为理想。
 
     1.新建服务 
     可以参考:https://www.cnblogs.com/ywkcode/p/11569593.html
 
     2.Quartz使用
     可以参考:https://www.cnblogs.com/ywkcode/p/11110126.html
 
代码如下:
(1)创建任务
新建“UpdateJob”类实现IJob接口
 1   public class UpdateJob : IJob
 2       {
 3        
 4         public async Task Execute(IJobExecutionContext context)
 5         {
 6             try
 7             {
 8                 await Task.Run(() => UpdateJobFun());
 9             }
10             catch (Exception ex)
11             {
12                 await Task.Run(() => LogHelper.WriteLogs(""));
13                 throw ex;
14             }
15         }
16         public void UpdateJobFun()
17         {
18                       //日志记录
19             LogHelper.WriteLogs("当前时间为:"+DateTime.Now.ToString("yyyy-MM-dd  HH:mm:ss"));
20         }
21     }
 
(2)创建任务调度器->创建触发器->将任务和触发器添加到调度器中
 创建类“JobScheduler”
 1 public class JobScheduler
 2     {
 3         //调度器工厂
 4         private static readonly ISchedulerFactory factory = null;
 5         //调度器
 6         private static readonly IScheduler scheduler = null;
 7         //定时规则
 8         public static string QuartzCron =
 9             ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["QuartzCron"].Value; //
10         static JobScheduler()
11         {
12             //创建一个工厂
13             factory = new StdSchedulerFactory();
14             scheduler = factory.GetScheduler().Result;
15             scheduler.Start();
16         }
17         public static void Start()
18         {
19           
20                 scheduler.GetJobGroupNames();
21                 IJobDetail job;
22                 ITrigger trigger;
23                 //创建任务
24                 //Quartz.JobBuilder.Create().Build();
25                 job = JobBuilder.Create().Build();
26                 //创建触发器
27                 trigger = TriggerBuilder.Create()
28                     .WithIdentity("TimeTrigger", "TimeGroup")
29                     //.WithSimpleSchedule(t => t.WithIntervalInMinutes(1).RepeatForever())
30                     .WithCronSchedule(QuartzCron)
31                     .Build();
32                 //添加任务及触发器至调度器中
33                 scheduler.ScheduleJob(job, trigger);
34                 //启动
35                 scheduler.Start();
36        
37         }
38         public static void OnStop()
39         {
40             if (!scheduler.IsShutdown)
41             {
42                 scheduler.Shutdown();
43             }
44         }
45     }
      其中触发器的规则除了常用的时分秒间隔外,还能够通过Corn表达式自定义,参考规则 http://cron.qqe2.com/,本文是以每天的9点到晚上22点,整点定时执行("0 0 9,10,11,12,13,14,15,16,17,18,19,20,21,22 * * ? *")
 
(3)开启或结束任务
 1   public partial class QuartzService : ServiceBase
 2     {
 3       
 4         private IScheduler scheduler;
 5         public QuartzService()
 6         {
 7             InitializeComponent();
 8              
 9         }
10         protected override void OnStart(string[] args)
11         {
12             JobScheduler.Start();
13         }
14         protected override void OnStop()
15         {
16             JobScheduler.OnStop();
17         }
18     }

 

C#-Windows服务+Quartz定时任务

标签:settings   task   tin   理想   evel   ati   div   async   shu   

原文地址:https://www.cnblogs.com/ywkcode/p/12129084.html


评论


亲,登录后才可以留言!