zoukankan      html  css  js  c++  java
  • Quartz C# 官方示例 任务调度插件

    十年河东,十年河西,莫欺少年穷

    学无止境,精益求精

    先来点干货,每五秒执行一次

    1、程序入口

        class Program
        {
            static void Main(string[] args)
            {
                Task.Run(() => { JobManager.RunSche().GetAwaiter().GetResult(); });
                Console.ReadKey();
            }
        }

    2、触发器注册

    using Quartz;
    using Quartz.Impl;
    using Quartz.Impl.Matchers;
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CabinetElectricExe
    {
        public class JobManager
        {
            private static IScheduler scheduler;
            public static async Task RunSche()
            {
                try
                {
                    Console.WriteLine("ServiceStart");
                    StdSchedulerFactory factory = new StdSchedulerFactory();
                    scheduler = await factory.GetScheduler();
                    await JobSchedule<JobCenter>.ScheduleDayJob(scheduler);
                    await scheduler.Start();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("jobinitException");
                   // Log.Inst.Info($"jobinitException:{ex.ToString()}");
                }
    
            }
    
            public static async Task<string> Monitor()
            {
                var groups = await scheduler.GetJobGroupNames();
                var jobstring = new StringBuilder();
                foreach (var item in groups)
                {
                    var jobkeys = await scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(item));
                    foreach (var jobkey in jobkeys)
                    {
                        string jobName = jobkey.Name;
                        string jobGroup = jobkey.Group;
                        var job = await scheduler.GetJobDetail(jobkey);
                        var triggers = await scheduler.GetTriggersOfJob(jobkey);
    
                        foreach (ITrigger trigger in triggers)
                        {
                            dynamic trg = trigger;
                            TriggerKey triggerKey = new TriggerKey(trg.Name, trg.Group);
                            TriggerState x = scheduler.GetTriggerState(triggerKey).Result;
                            var lastTime = trigger.GetPreviousFireTimeUtc().GetValueOrDefault().ToString("yyyy-MM-dd HH:mm:ss");
                            var nextTime = trigger.GetNextFireTimeUtc().GetValueOrDefault().ToString("yyyy-MM-dd HH:mm:ss");
                            jobstring.AppendFormat($@"状态:{ x.ToString()},上次执行时间:{lastTime},下次执行时间:{nextTime},job:{jobName},group:{jobGroup};");
                        }
                    }
                }
                return jobstring.ToString();
            }
        }
    }
    View Code

    3、触发器注册,执行函数

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading.Tasks;
    using static Quartz.MisfireInstruction;
    
    namespace CabinetElectricExe
    {
        public class JobCenter : IJob
        {
            public JobCenter()
            {
            }
    
            /// <summary>
            /// 调用入口
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            public async Task Execute(IJobExecutionContext context)
            {
                //HttpHelper.Post($"{CommonConfig.PMPath}job/excute", "");
                Console.WriteLine("执行了一次");
            }
        }
    
        public class JobSchedule<T> where T : IJob
        {
            /// <summary>
            /// 注册一个执行服务【定义他的频率,执行时间等,参考】
            /// </summary>
            /// <param name="scheduler"></param>
            /// <returns></returns>
            public static async Task ScheduleDayJob(IScheduler scheduler)
            {
    
                var jobName = "CabinetElectricExe";
                IJobDetail job = JobBuilder.Create<T>()
                  .WithIdentity($"{jobName}Job", $"{jobName}Group")
                  .Build();
    
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity($"{jobName}Trigger", $"{jobName}Group")
                    .StartAt(DateTime.Now.AddSeconds(5)) //启动间隔
                    //.StartNow()
                    .WithSimpleSchedule(x => x
                       .WithIntervalInSeconds(5) //等待间隔
                       .RepeatForever())
                    .Build();
    
                var st = await scheduler.ScheduleJob(job, trigger);
         
                
            }
        }
    }
    View Code

    最后,官方示例下载链接:https://files.cnblogs.com/files/chenwolong/Quartz.NET-2.3.2.zip   【CSDN花了60积分搞下来的,分享出去了,喜欢就点个赞】

    @天才卧龙的伯乐

  • 相关阅读:
    Tutorial: Getting Started with TFS in VS2010 (转载)
    Flex开源组件——FlexReport
    GIS和开源见解(摘录)
    Google Wave了解(资料收集)
    分享ArcGis For Flex API 1.3 Diagram
    基于.NET的开源GIS项目收集整理(转载)
    TFS 2010 for SourceSafe Users (转载)
    一个处理UTF8编码文件BOM头的简单方法
    用ISO文件制作启动U盘
    为Ubuntu安装buildessential软件包
  • 原文地址:https://www.cnblogs.com/chenwolong/p/Quartz.html
Copyright © 2011-2022 走看看