zoukankan      html  css  js  c++  java
  • 定时任务 QuartZ 组件的简单使用

    框架:.NET 5.0 控制台

    nuget:Quartz(3.3.3)

    IScheduler:与调度程序进行交互的主要API。
    
    IJob:由您希望由调度程序执行的组件实现的接口。
    
    IJobDetail:用于定义Jobs的实例。
    
    ITrigger:定义将在其上执行给定Job的计划的组件。
    
    JobBuilder:用于定义/构建JobDetail实例,该实例定义Jobs实例。
    
    TriggerBuilder:用于定义/构建触发器实例。

    代码:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Run();
            Console.ReadKey();
        }
    
        /// <summary>
        /// 任务调度的使用过程
        /// </summary>
        /// <returns></returns>
        public async static Task Run()
        {
            ISchedulerFactory _schedulerFactory = new StdSchedulerFactory();
    
            // 创建 调度器
            IScheduler _scheduler = await _schedulerFactory.GetScheduler();
    
            // 开启 调度器
            await _scheduler.Start();
    
            // 创建 作业实例
            IJobDetail job = JobBuilder.Create<Jobs>()  //Jobs即我们需要执行的作业
                    .WithIdentity("Myjob", "group1")    //我们给这个作业取了个"Myjob"的名字,并取了个组名为"group1"
                    .Build();
    
            // 创建 触发器(也叫时间策略)
            ITrigger trigger = TriggerBuilder.Create()
                //.WithIdentity("Mytrigger", "group1")
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
                .Build();
    
            // 将触发器和作业任务绑定到调度器中
            await _scheduler.ScheduleJob(job, trigger);
        }
    }
    
    /// <summary>
    /// 任务
    /// </summary>
    public class Jobs : IJob
    {
        public virtual Task Execute(IJobExecutionContext context)
        {
            return Console.Out.WriteLineAsync($"job工作了 在{DateTime.Now}");
        }
    }

    实现:

    其他实现方式:

    1. 使用 System.Timers.Timer 和 System.Threading.Timer 实现定时任务

    2. 使用 while 和 sleep 及 Task 实现定时任务

    为什么使用 Quartz:

      支持更为复杂的时间策略。

    参考:

    https://blog.csdn.net/xiaolu1014/article/details/103863979

    https://blog.csdn.net/xiaolu1014/article/details/103880704

  • 相关阅读:
    JavaSE--注解
    JavaSE--【JAVA】unicode为12288字符
    Spring--Spring 注入
    Spring--@configuration 和 @Bean
    JavaEE--分布式对象
    JavaSE--jdom解析之bom
    JavaEE--分布式与集群
    JavaEE--调用 WSDL -- httpclient 4.x.x
    JavaSE--RMI初识
    Redis--初识Redis
  • 原文地址:https://www.cnblogs.com/Allofus/p/15506920.html
Copyright © 2011-2022 走看看