Quartz作业调度实践

Quartz的使用场景:
例如:每5秒对某个平台传输数据

Quartz框架的一些基础概念解释:
Scheduler 作业调度器。
IJob 作业接口,继承并实现Execute, 编写执行的具体作业逻辑。
JobBuilder 根据设置,生成一个详细作业信息(JobDetail)。
TriggerBuilder 根据规则,生产对应的Trigger
这里有个注意点Quartz包的版本必须要2.6.2,因为后面的版本以后也就是3开头的StdSchedulerFactory.GetDefaultScheduler()返回值改了
在这里插入图片描述

1.job测试类

    /// <summary>
    /// 无参作业
    /// </summary>
    public class Test1Job : IJob
    {
    
    
        public void Execute(IJobExecutionContext context)
        {
    
    
            //写业务代码
            Console.WriteLine($"{DateTime.Now}{"无参作业执行!"}");
        }
    }
    public class Test2Job : IJob
    {
    
    
        /// <summary>
        ///  有参作业
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {
    
    
            JobDataMap dataMap = context.JobDetail.JobDataMap;

            string test = dataMap.GetString("testPara");

            Console.WriteLine($"{DateTime.Now}{"有参作业执行,test值:"} {test}");
        }
    }

2.测试代码

  			//从工厂中获取一个调度器实例化
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();        //开启调度器
            //第一个例子无参作业创建
            //创建一个作业 -WithIdentity的参数(作业名称,做业组)
            //当你有不同类型的job时可以将相同类型的job放到一个组里,同一个组里的job可以使用相同的逻辑来处理
            IJobDetail job1 = JobBuilder.Create<Test1Job>()   //创建一个作业
                .WithIdentity("JobName", "group")
                .Build();
            // Trigger 作为作业的定时管理工具,一个 Trigger 只能对应一个作业实例,而一个作业实例可对应多个Trigger ;
            //创建一个触发器 -WithIdentity的参数(触发器名称,触发器组)
            ITrigger trigger1 = TriggerBuilder.Create()
                                        .WithIdentity("mytrigger", "group1")
                                        .StartNow()                         //现在开始
                                        .WithSimpleSchedule(x => x          //触发时间,5秒一次。
                                            .WithIntervalInSeconds(5)
                                            .RepeatForever())               //不间断重复执行
                                        .Build();


            scheduler.ScheduleJob(job1, trigger1);       //把作业,触发器加入调度器。

            //有参作业用传参数UsingJobData
            IJobDetail job2 = JobBuilder.Create<Test2Job>()
                                        .WithIdentity("JobName1", "group")
                                        .UsingJobData("testPara", "有参")
                                        .Build();
            //WithCronSchedule("") 拥有强大的Cron时间表达式,正常情况下WithSimpleSchedule(x) 已经满足大部分对日期设置的要求了。
            // Cron时间表达式 由7段构成:秒 分 时 日 月 星期 年(可选,一般情况下是没有这段)
            //https://cron.qqe2.com/    可以在线生成
            ITrigger trigger2 = TriggerBuilder.Create()
                                        .WithIdentity("mytrigger1", "group1")
                                        .StartNow()
                                        .WithCronSchedule("0/5 * * * * ?")     //时间表达式,5秒一次     
                                        .Build();
            scheduler.ScheduleJob(job2, trigger2);
            //scheduler.Shutdown();         //关闭调度器。
            Console.ReadKey();

猜你喜欢

转载自blog.csdn.net/q1923408717/article/details/113186041