首页 > 其他分享 >.netCore 使用 Quartz 实例

.netCore 使用 Quartz 实例

时间:2022-12-15 17:15:27浏览次数:52  
标签:Quartz Console netCore Create Task 实例 WriteLine sched public

一、参考源文链接 

1、https://www.likecs.com/show-897836.html

2、https://blog.csdn.net/weixin_43614067/article/details/115373776

二、Quartz基本使用

public class Job1 : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine("开始定时任务1");
            return Task.CompletedTask;
        }
    }

    public class Job2 : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine("开始定时任务2");
            return Task.CompletedTask;
        }
    }
     /// <summary>
        /// 定时任务执行实例1
        /// </summary>
        public static void Test1()
        {
            var _scheduler = new StdSchedulerFactory().GetScheduler().Result;
            var trigger1 = TriggerBuilder.Create()
                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())//每10秒执行一次
                            .Build();
            var trigger2 = TriggerBuilder.Create()
                               .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())//每10秒执行一次
                               .Build();
            var jobDetail = JobBuilder.Create<Job1>()
                                .WithIdentity("Myjob1", "group")//我们给这个作业取了个“Myjob”的名字,并取了个组名为“group”
                                .Build();
            var jobDetai2 = JobBuilder.Create<Job2>()
                            .WithIdentity("Myjob2", "group")//我们给这个作业取了个“Myjob”的名字,并取了个组名为“group”
                           .Build();
            _scheduler.ScheduleJob(jobDetail, trigger1).Wait();
            _scheduler.ScheduleJob(jobDetai2, trigger2).Wait();
            _scheduler.Start().Wait();
        }

二、暂停和恢复某个任务

public class StartJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            for (int i = 0; i < 3; i++)
            {
                try
                {
                    Thread.Sleep(1000);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                }
                Console.WriteLine(("hello~~~~~~~~~~~~~~~~~~" + i + DateTime.Now.ToString()));
            }

            return Task.CompletedTask;
        }

    }
 public class PauseJob : IJob

    {
        public Task Execute(IJobExecutionContext context)
        {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = null;
            try
            {
                sched = sf.GetScheduler().Result;
                Console.WriteLine("对象sf:" + sf);
                Console.WriteLine("对象sched:" + sched);
            }
            catch (SchedulerException e)
            {
                Console.WriteLine(e.StackTrace);
            }
            CommonUtil.PauseJob(sched, "startJob", "group1");

            return Task.CompletedTask;
        }
    }
 public class ResumeJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = null;
            try
            {
                sched = sf.GetScheduler().Result;
                Console.WriteLine("对象sf:" + sf);
                Console.WriteLine("对象sched:" + sched);
            }
            catch (SchedulerException e)
            {
                Console.WriteLine(e.StackTrace);
            }
            CommonUtil.ResumeJob(sched, "startJob", "group1");

            return Task.CompletedTask;
        }

    }
  public class CommonUtil
    {
        /// <summary>
        /// 暂停一个job,暂停后,任务若未执行完,会执行完毕为止。
        /// </summary>
        /// <param name="scheduler"></param>
        /// <param name="jobName"></param>
        /// <param name="jobGroupName"></param>
        public static void PauseJob(IScheduler scheduler, string jobName, string jobGroupName)
        {
            try
            {
                scheduler.PauseJob(new JobKey(jobName, jobGroupName));
                Console.WriteLine(string.Format("定时任务%s暂停成功!", jobName));
            }
            catch (SchedulerException e)
            {
                Console.WriteLine((string.Format("定时任务%s暂停异常!", jobName)));
            }
        }

        /// <summary>
        /// 恢复一个job 恢复定时器时立刻先执行一次定时器的任务 然后再按计划执行
        /// </summary>
        /// <param name="scheduler"></param>
        /// <param name="jobName"></param>
        /// <param name="jobGroupName"></param>
        public static void ResumeJob(IScheduler scheduler, String jobName, String jobGroupName)
        {
            try
            {
                scheduler.ResumeJob(new JobKey(jobName, jobGroupName));
                Console.WriteLine((string.Format("定时任务%s恢复成功!", jobName)));
            }
            catch (SchedulerException e)
            {
                Console.WriteLine((string.Format("定时任务%s恢复异常!", jobName)));
            }
        }

    }
 public static void Test()
        {

            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler().Result;

            //创建相关的job信息  
            IJobDetail startJob = JobBuilder.Create<StartJob>()
                    .WithIdentity("startJob", "group1")
                        .Build();

            IJobDetail pauseJob = JobBuilder.Create<PauseJob>()
                    .WithIdentity("pauseJob", "group2")
                        .Build();

            IJobDetail resumeJob = JobBuilder.Create<ResumeJob>()
                    .WithIdentity("resumeJob", "group3")
                        .Build();

            //创建触发器的名称  
            //每2s执行startJob任务
            ITrigger startTrigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                 .WithSchedule(CronScheduleBuilder.CronSchedule("0/2 * * * * ?")).Build();
            //每10s执行暂停任务,去暂停startJob任务
            ITrigger pauseTrigger = TriggerBuilder.Create()
                .WithIdentity("trigger2", "group2")
            .WithSchedule(CronScheduleBuilder.CronSchedule("0/10 * * * * ?")).Build();
            //每15s执行恢复任务,去恢复startJob任务
            ITrigger resumeTrigger = TriggerBuilder.Create()
                .WithIdentity("trigger3", "group3")
            .WithSchedule(CronScheduleBuilder.CronSchedule("0/15 * * * * ?")).Build();

            sched.ScheduleJob(startJob, startTrigger);
            sched.ScheduleJob(pauseJob, pauseTrigger);
            sched.ScheduleJob(resumeJob, resumeTrigger);

            sched.Start();
        }

 

标签:Quartz,Console,netCore,Create,Task,实例,WriteLine,sched,public
From: https://www.cnblogs.com/mojiejushi/p/16985492.html

相关文章

  • 让QT只运行一个实例
         目前使QT运行一个实例有三种方式:1.QSharedMemory     使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出;这种方式有弊端,在程序发......
  • ECharts系列 - 柱状图(条形图)实例一
    原文链接:https://blog.csdn.net/zou128865/article/details/42802671/ECharts主页:http://echarts.baidu.com/index.htmlECharts-2.1.8下载地址:http://echarts.baidu.co......
  • JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇
     前两篇文章分表讲述了后置处理器-正则表达式提取器概述及简单实例、多参数获取,相应博文敬请参阅 ​​简单实例​​、​​多参数获取​​。此文主要讲述如何引用正则表......
  • 简单实例
    一个基础使用方式,方便自己查看。packagecom.sora.springboot01.netty;importio.netty.bootstrap.Bootstrap;importio.netty.channel.ChannelFuture;importio.nett......
  • 极客编程python入门-类和实例
    类和实例面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各......
  • ubuntu SMC迁移 后发现 实例内网一直都是原虚机的内网IP
    ubuntuSMC迁移后发现实例内网一直都是原虚机的内网IPipa能看到现在的ECS内网以及原虚机的内网但是ifconfig看只有原虚机的内网IP于是尝试dhclienteth0重启内......
  • Matlab遗传算法工具箱的使用及实例(非线性规划)
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • C# XML描述与实例增删改
    概述用于小型项目数据存储,信息传递。系统配置文件等特点必须有根节点(对比HTML)标签只能自定义 (对比HTML)头声明可有可无建议书写<?xmlversion="1.0"encoding=......
  • CAD怎么画三维图?通过3D魔方设计实例教会你CAD三维建模!
    CAD怎么画三维图?作为一款研发创新型工业软件,浩辰CAD不仅可以快速、精确地绘制各种二维工程图纸,还可以辅助设计师高效完成3D建模。尤其是在2022版本,浩辰CAD对于3D设计模块做......
  • .NetCore【工作应用】Unity
    UnityUnity是一个IoC容器,用来实现依赖注入(DependencyInjection,DI),减少耦合Unity安装install-packageUnity使用IUnityContainercontainer=newUnity......