zoukankan      html  css  js  c++  java
  • C#-Windows服务+Quartz定时任务

          Windows服务中,因为需要精确到特定时间执行,用Quartz代替定时器Timer。
          顺便一提,Quartz如果在网页的项目中使用,Quartz会因为网页的关闭而停止,所以和Windows服务搭配较为理想。
     
         1.新建服务 
     
         2.Quartz使用
     
    代码如下:
    (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<UpdateJob>().Build();
    25                 job = JobBuilder.Create<UpdateJob>().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     }
  • 相关阅读:
    循环
    list和tuple
    Python字符串和编码注意点
    【转载】国内安卓推送的希望
    【转载】Android属性动画和视图动画的区别
    【转载】Android 属性动画详解
    【转载】 android 属性动画详解
    java8 新特性学习详细篇2
    java8 新特性详细篇
    JAVA8十大新特性
  • 原文地址:https://www.cnblogs.com/ywkcode/p/12129084.html
Copyright © 2011-2022 走看看