zoukankan      html  css  js  c++  java
  • Quartz定时任务+window服务的简单应用

    1. 首页在项目中安装Quartz的Nuget包
    2. 新建一个任务, 也可以称为作业

       public class MyJob : IJob
          {
              private int _Count = 0;
              public MyJob() {
                  this._Count = new Random().Next(100, 999);
                  Console.WriteLine("_count = " +this._Count);
              }
              public async Task Execute(IJobExecutionContext context)
              {
                  await Task.Run(()=> {
                      try
                      {
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
                          Console.WriteLine("MyJob 正在执行 线程id= "+Thread.CurrentThread.ManagedThreadId);
      
                          Logger log = new Logger(typeof(MyJob));
                          log.Info("MyJob 正在执行 线程id = "+Thread.CurrentThread.ManagedThreadId);
                         JobDataMap data= context.JobDetail.JobDataMap;
      
                          //获取参数
                         // Console.WriteLine($"JobDetail :{data1.GetString("aaa1")}");
                      }
                      catch (Exception ex)
                      {
                          Console.WriteLine(ex.Message);
                      }
                  });
              }
          }
      MyJob
    3. 把任务和一个触发器关联起来
       public class DispatcherManager
          {
              public async static Task Init() {
                  StdSchedulerFactory factory = new StdSchedulerFactory();
                  IScheduler scheduler = await factory.GetScheduler();
                  await scheduler.Start();
                  //创建作业
                  IJobDetail jobdetail = JobBuilder.Create<MyJob>()
                      .WithIdentity("testjob", "group1")//起名称
                      .WithDescription("this is testjob")
                      .Build();
                 //创建触发器
                  ITrigger trigger = TriggerBuilder.Create()
                                      .WithIdentity("testjob", "group1")//group1必须保持一致 
                                      //.StartAt(DateTime.Now.AddSeconds(2))//那个时间启动
                                      .StartNow() //这个是马上启动
                                      .WithCronSchedule("5/10 * * * * ?")//时间规则
                                      .WithDescription("this is testjob`s trigger")
                                      .Build();
                  //异步执行
                  await scheduler.ScheduleJob(jobdetail,trigger);
                  //Console.WriteLine("作业完成");
              }
          }
    4. 调用执行
       static void Main(string[] args)
              {
                  try
                  {
                      DispatcherManager.Init().GetAwaiter().GetResult();
                  }
                  catch (Exception ex)
                  {
      
                      Console.WriteLine(ex.Message);
                  }
                  Console.Read();
      
              }
    5. 新建一个window 服务项目 
    6. 在service中调用Init();
    7. 设置服务名称
    8. 安装与卸载服务: 找到自己的项目路径 下 bindebug 下的xxxService.exe文件

      管理员身份打开cmd
      
      //安装服务
      C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil  "自己项目路径"	est.WindowsService.exe
      
      //卸载服务
      C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil /u  "自己项目路径"	est.WindowsService.exe
    9. 现在这个服务就可以在系统服务中看到了,启动它, 就会定时执行你写好的任务了。是不是很简单呢??
  • 相关阅读:
    io学习三
    io学习二
    io学习一
    多线程学习(十五)
    spring源码阅读(四)
    多线程学习(十四)
    多线程学习(十三)
    设计模式(一)
    spring源码阅读(三)
    spring源码阅读(二)
  • 原文地址:https://www.cnblogs.com/hkf100/p/13611006.html
Copyright © 2011-2022 走看看