ibcadmin 发表于 2019-12-26 09:08:07

Quartz.NET常用方法 01

<p> Quartz.NET作为一款定时框架,它的最小可运行步调如下:</p>



    var scheduler = StdSchedulerFactory.GetDefaultScheduler();

    scheduler.Start();

    //Job实验的使命
    var job = JobBuilder.Create<MyJob>().Build();

    //Schedule筹划表,可以设置调用次数,调用间隔
    //Trigger触发器,可以设置调用开始,竣事时间,优先级
    var trigger = TriggerBuilder.Create().WithSimpleSchedule(
                                       m => m.WithIntervalInSeconds(1).WithRepeatCount(1))
                                        .StartNow()//.EndAt(DateTimeOffset.Now.AddSeconds(10))
                                        .Build();

    scheduler.ScheduleJob(job, trigger);



它有两个焦点要素:Job和Trigger,Job用于通过实现了IJob接口的泛型即PublishJob告诉框架做什么,而Trigger告诉框架何时做。


MyJob类:


    /// <summary>
    /// 自界说使命
    /// </summary>
    public class MyJob : IJob
    {
      public void Execute(IJobExecutionContext context)
      {
            //实现详细的业务逻辑
      }
    }




Job常用方法
UsingJobData(key, value)方法
通过这个方法可以给详细的使命实现类即上面的MyJob传值,比方: context.JobDetail.JobDataMap["count"]

WithDescription(description)方法
用于形貌Job的名称,业务逻辑,我一开始还很希奇使命的名称和业务逻辑完全可以在代码中形貌,为何还要有这个方法,原来这个方法的使用场景是:自界说定时使命框架,好比开辟一套雷同于Windows定时使命的工具。

WithIdentity(name)
给JobKey定名,JobKey是JobBuilder的一个属性,它的底层代码如下:



    public JobBuilder WithIdentity(string name)
    {
      //new一个JobKey,name是key的名称,group名称是null
      key = new JobKey(name, null);
      return this;
    }




StoreDurably(durability)
是否长期化(默认当没有Trigger指向Job时,Job会被删掉)

SetJobData(newJobDataMap)
给JobDataMap设置一个新的对象,这个方法与上面的UsingJobData方法区别在于一个是给JobDataMap添加值,一个是重新给这个对象赋值,它们的底层代码如下。

SetJobData:



      public JobBuilder SetJobData(JobDataMap newJobDataMap)
      {
            jobDataMap = newJobDataMap;
            return this;
      }



UsingJobData:



      public JobBuilder UsingJobData(string key, string value)
      {
            jobDataMap.Put(key, value);
            return this;
      }




Trigger常用方法
StartAt(startTimeUtc) 方法
设置触发器开始实验的时间,这个参数是可以设置时区的。

Quartz.NET框架自身还封装了一个日期工具类DateBuilder,它实现类很多返回下一分钟(小时,天等)方法,它与StartAt可以或许很好地共同。
比方:
DateBuilder.EvenMinuteDateAfterNow(); 返回现在时间地下一分钟,比方:现在的时间是12点29分20秒,它会返回12点30分00秒

EndAt(endTimeUtc) 方法
与StartAt对应的是EndAt方法,它用于设置触发器的关闭时间

WithSimpleSchedule(action) 方法
创建了一个简单的实验筹划,可以设置实验次数,频率等,这个方法是最常用的,我们认识的Timer定时器就雷同于这个。
它的参数是一个委托Action<SimpleScheduleBuilder>,我们就是通过调用SimpleScheduleBuilder的方法来设置实验次数&间隔时间的。

WithDailyTimeIntervalSchedule(action) 方法
创建一个功能更强的实验筹划,它可以设置天天几点到几点实验,工作日实验或只在周末实验,在实验了频频后克制,在某一个星期实验,设置实验频率等。
它的参数是一个委托Action<DailyTimeIntervalScheduleBuilder>,我们就是通过调用DailyTimeIntervalScheduleBuilder的方法来设置实验计谋的。

WithCronSchedule(cronExpression)方法
通过Corn表达式来设置实验筹划,这种方式与上面两种的优点在于我们可以不再通过硬编码的方式来设置实验计谋,而是通过字符串来控制实验计谋。

语法如下:



      //秒 分 时 天 月 年 周
      //1. 天大概周必须有一个是?(?表现含糊)
      //2. * 表现全部值即,秒位为*表现每秒实验一次
      //3. - 表现范围,分钟位为10-12表现每个小时的10,11,12分实验一次
      //4. , 表现每个值即,分钟位为10,20,30表现每个小时的10,20,30分实验一次
      //5. / 表现递增,秒位为0/5表现0,5,10,15,20,25,30,35,40,45,50,55秒实验一次
      //例子:
      // * * * * * ?       => 每秒实验一次
      // 0/5 * * * * ?   => 5s实验一次
      // 0 * * * * ?       => 1min实验一次
      // 0 0 1 * * ?       => 每个月1号实验一次
      // 地点:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html







<p></p>
页: [1]
查看完整版本: Quartz.NET常用方法 01