zoukankan      html  css  js  c++  java
  • 框架_Quartz框架应用(定时调度任务框架)

    Quartz目录

      1.Nuget下载引用 Quartz

      2.调度管理中心

        方法策略,时间策略,框架日志,

      3.具体执行策略中心

      4.额外监控策略

      5.方法策略,时间策略改为配置文件和IOC容器结合

      6.可视化界面管理

      7.程序集成到WindowsService最终应用

     

    框架解析

     

     

     

     

    2.调度管理中心

        方法策略,

        

     

     

     

     

     

    时间策略,

     

     

    框架日志执行输出,

     

     

     

     

    3.具体执行策略中心

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace DispatcherProject.QuartzNet.CustomJob
    {
    
        [PersistJobDataAfterExecution] //锚点1:设置这个后  可以在执行后可以保留执行结果
        [DisallowConcurrentExecution] //设置这个后 让定时执行的任务变成串行,必须等待前面任务执行完成才会继续执行下一个任务,就像设置每5秒执行一次任务,但是前面任务没执行完成,后面任务又开始了就会存在问题
        public class SendMessage : IJob
        {
    
            //private static object obj = new object(); //定义一个静态变量也可以实现 执行后可以保留执行结果
    
            public SendMessage()
            {
                Console.WriteLine("SendMessage 被构造");
            }
    
            public async Task Execute(IJobExecutionContext context) //context 很强大  他会包含我们想要的切
            {
                await Task.Run(() =>
                {
    
                    Thread.Sleep(5000);
    
                    #region  sendJob 
                        //发消息:给谁发,需要传递参数;
                         Console.WriteLine();
                        Console.WriteLine("**********************************************");
                        JobDataMap jobDetailMap = context.JobDetail.JobDataMap;
    
                        Console.WriteLine($"{jobDetailMap.Get("字符串1")}{DateTime.Now}");
                        Console.WriteLine($"{jobDetailMap.Get("字符串2")}{DateTime.Now}");
                        Console.WriteLine($"{jobDetailMap.Get("字符串3")}{DateTime.Now}");
                        Console.WriteLine($"{jobDetailMap.Get("字符串4")}{DateTime.Now}");
                        Console.WriteLine($"{jobDetailMap.Get("Year")}");
                        jobDetailMap.Put("Year", jobDetailMap.GetInt("Year") + 1);
    
                        JobDataMap triggerMap = context.Trigger.JobDataMap;
                        Console.WriteLine();
    
                    #endregion
    
                    #region trigger 
    
                        Console.WriteLine($"{triggerMap.Get("时间策略的字符串1")}{DateTime.Now}");
                        Console.WriteLine($"{triggerMap.Get("时间策略的字符串2")}{DateTime.Now}");
                        Console.WriteLine($"{triggerMap.Get("时间策略的字符串3")}{DateTime.Now}");
                        Console.WriteLine($"{triggerMap.Get("时间策略的字符串4")}{DateTime.Now}");
    
                        //锚点1 获取执行的结果
                        var getYear = triggerMap.Get("Year");
                        Console.WriteLine($"{triggerMap.Get("Year")}");
    
                        Console.WriteLine("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
                        Console.WriteLine(context.MergedJobDataMap.Get("Year"));
                        Console.WriteLine("**********************************************");
                        Console.WriteLine();
    
                    #endregion
    
    
                });
            }
        }
    }
    View Code

     

     

    4.额外监控策略

      1.自定义作业监听器 监控工作任务

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace DispatcherProject.QuartzNet.CustomListener
    {
        /// <summary>
        /// 自定义作业监听器,需要实行接口IJobListener
        /// </summary>
        public class CustomJobListener : IJobListener
        {
            public string Name => "CustomJobListener";
    
            public async Task JobExecutionVetoed(IJobExecutionContext context, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    //便于我们自己添加自己的业务逻辑
                    Console.WriteLine($"{DateTime.Now} this is JobExecutionVetoed");
                });
            }
             
            public async Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine($"{DateTime.Now} this is JobToBeExecuted");
                });
            }
    
            public async Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine($"{DateTime.Now} this is JobWasExecuted");
                });
            }
        }
    }
    View Code

      2.自定义调度程序监听器 监控调度程序

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace DispatcherProject.QuartzNet.CustomListener
    {
        /// <summary>
        /// 自定义调度程序侦听器
        /// </summary>
        public class CustomSchedulerListener : ISchedulerListener
        {
            public async Task JobAdded(IJobDetail jobDetail, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine($"{jobDetail.Description} 被加入到Scheduler");
                });
            }
    
            public async Task JobDeleted(JobKey jobKey, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine($"{jobKey} 被删除 ");
                });
            }
    
            public Task JobInterrupted(JobKey jobKey, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task JobPaused(JobKey jobKey, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task JobResumed(JobKey jobKey, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public async Task JobScheduled(ITrigger trigger, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine("this is JobScheduled");
                });
            }
    
            public Task JobsPaused(string jobGroup, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task JobsResumed(string jobGroup, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task JobUnscheduled(TriggerKey triggerKey, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task SchedulerError(string msg, SchedulerException cause, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task SchedulerInStandbyMode(CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task SchedulerShutdown(CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task SchedulerShuttingdown(CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public async Task SchedulerStarted(CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine($"this is SchedulerStarted");
                });
            }
    
            public async Task SchedulerStarting(CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine($"this is SchedulerStarting");
                });
            }
    
            public Task SchedulingDataCleared(CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task TriggerFinalized(ITrigger trigger, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task TriggerPaused(TriggerKey triggerKey, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task TriggerResumed(TriggerKey triggerKey, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task TriggersPaused(string triggerGroup, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
    
            public Task TriggersResumed(string triggerGroup, CancellationToken cancellationToken = default)
            {
                throw new NotImplementedException();
            }
        }
    }
    View Code

      3.自定义触发监听器 监控时间策略

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace DispatcherProject.QuartzNet.CustomListener
    {
        /// <summary>
        /// 自定义触发监听器
        /// </summary>
        public class CustomTriggerListener : ITriggerListener
        {
            public string Name => "CustomTriggerListener";
    
            public async Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                { 
                    Console.WriteLine("this is TriggerComplete");
                });
            }
    
            public async Task TriggerFired(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine("this is TriggerFired");
                });
            }
    
            public async Task TriggerMisfired(ITrigger trigger, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine("this is TriggerComplete");
                });
            }
    
            public async Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default)
            {
                await Task.Run(() =>
                {
                    Console.WriteLine("VetoJobExecution");
                });
                return false;  //返回false才能继续执行
            }
        }
    }
    View Code

     

    5.IOC容器结合

    7.获取框架日志信息

  • 相关阅读:
    最近,我和隐私计算干上了。
    面试官疯了吗,问我为什么浮点数不精确?
    全网连夜修复的Log4j漏洞,如何做到一行代码都不改?
    Log4j未平,Logback 又起!再爆漏洞?
    聊聊云原生和微服务架构
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏01游戏窗口
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏03全屏显示游戏窗口
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏04图像资源的透明处理
    python及pygame雷霆战机游戏项目实战01 控制飞机
  • 原文地址:https://www.cnblogs.com/LZXX/p/13178125.html
Copyright © 2011-2022 走看看