zoukankan      html  css  js  c++  java
  • Quartz.net笔记

    Quartz.net:

    定时执行框架,几乎可以执行所有触发器类型的定时任务,非常灵活。

    基本概念:

    IScheduler:任务调度器,相当于一个大的容器。调度器通常在应用程序启动时创建,一个应用程序实例通常只需要一个调度器即可。
    IJob:工作
    Trigger:触发器,job和trigger的关系是一对多
    trigger有N多种,如:CronScheduleBuilder(Cron模式)、CalendarIntervalScheduleBuilder(定时模式)、SimpleScheduleBuilder...
    如果需要执行多个定时任务:IScheduler只需要创建一次,trgger、job需要创建多个,名称不要重复

    触发器:

    • 任务和触发器是一对多关系, 同一个任务可以绑定到多个触发器中,但是一个触发器只能绑定一个任务
    • 触发器可以在某天特定时间触发
    • 触发器可以在一周某一天触发(周一-周日)
    • 触发器可以在一个月中某一天触发
    • 触发器可以在一年某一天触发
    • 触发器支持排除日期列表
    • 触发器支持指定次数的重复触发
    • 触发器支持无限次数的重复触发
    • 触发器支持直到某个时间/日期重复触发
    • 触发器支持一定时间间隔的重复触发

    要执行一个定时任务,一般需要以下几步:

    • 创建实现IJob接口的Job,Job是作业的类型,描述了作业是如何执行的,这个类是由我们定义的;
    • 创建任务调度器。调度器通常在应用程序启动时创建,一个应用程序实例通常只需要一个调度器即可。
    • 创建JobDetail。JobDetail是Quartz对作业的封装,它包含Job类型,以及Job在执行时用到的数据,还包括是否要持久化、是否覆盖已存在的作业等选项。
    • 创建触发器。触发器描述了在何时执行作业。
    • 添加调度。当完成以上三步以后,就可以对作业进行调度了。

    Demo:

    启动时初始化一次即可

                IScheduler scheduler = new StdSchedulerFactory().GetScheduler();
                JobDetailImpl job = new JobDetailImpl("jdTest", typeof(EmailJob));
                //IMutableTrigger trigger = CronScheduleBuilder.DailyAtHourAndMinute(13, 32).Build();//每天13:40执行一次
                //CronScheduleBuilder.MonthlyOnDayAndHourAndMinute//每月哪天几点几分执行
                //CronScheduleBuilder.WeeklyOnDayAndHourAndMinute//每周固定时间执行
                //CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek//每周几,几点几分执行
    
                CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create();
                builder.WithInterval(3,IntervalUnit.Second);//每3秒执行一次
                IMutableTrigger trigger = builder.Build();
    
                //开始执行
                trigger.Key = new TriggerKey("triggerTest");
                scheduler.ScheduleJob(job, trigger);
                scheduler.Start();
    

    Job:

        public class EmailJob : IJob
        {
    //IJobExecutionContext 包含了与当前上下文中关联的Scheduler、JobDetail、Trigger等
            public void Execute(IJobExecutionContext context)
            {
                System.Console.WriteLine("execute lala ~~");
            }
        }
    

    Quartz.Net整合Autofac:

    • 引用Nuget包:Autofac.Extras.Quartz

    • 注入服务:
      containerBuilder.RegisterModule(new QuartzAutofacFactoryModule());
      containerBuilder.RegisterModule(new QuartzAutofacJobsModule(typeof(SurffixConsumerJob).Assembly));//Job所在的项目

    • 将上个Demo中的代码替换:

    IScheduler scheduler = new StdSchedulerFactory().GetScheduler().Result;
    替换为:
    IScheduler scheduler = this._serviceLocator.Resolve<IScheduler>();//框架帮我们创建了IScheduler,不需要自己创建,如果使用自己创建的IScheduler会导致Job注入失败
    
    • Job构造函数中注入服务:
        public class SurffixConsumerJob : IJob
        {
            private ILifetimeScope _serviceLocator = null;
            private RabbitAdvancedBus _bus = null;
            public SurffixConsumerJob(ILifetimeScope serviceLocator, RabbitHutch hutch)
            {
                this._serviceLocator = serviceLocator;
                this._bus = hutch.RabbitAdvancedBus;
            }
    
            //IJobExecutionContext 包含了与当前上下文中关联的Scheduler、JobDetail、Trigger等
            Task IJob.Execute(IJobExecutionContext context)
            {
            }
        }
    

    参考:
    https://www.cnblogs.com/lwqlun/p/9095106.html
    https://www.cnblogs.com/hzz521/tag/Quartz.NET/(待学习)

  • 相关阅读:
    Python 数据驱动 unittest + ddt
    接口知识介绍
    python 爬虫
    python 接口测试(三)
    基于PCA和SVM的人脸识别系统-error修改
    二分查找算法
    JAVA中运用数组的四种排序方法
    [Matlab] Attempt to execute SCRIPT *** as a function
    第36讲 activityForResult
    第35讲 Activity入门和跳转
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13647524.html
Copyright © 2011-2022 走看看