• Quartz.Net—TriggerBuilder


    TriggerBuilder

     TriggerBuilder是一个建造者模式,链式建造。通过静态方法构建一个TriggerBuilder实例,然后再调用类方法Build()创建一个ITrigger的实现。

    1、静态方法

    public static TriggerBuilder Create()
    {
        return new TriggerBuilder();
    }

    TriggerBuilder链式构造开始方法。

    2、触发的开始时间和结束时间。

    DateTimeOffset时间偏移。 UTC是世界统一时间,会有一个当前时区的偏移,世界各地都有各自的偏移量,中国的是东八区。

    TimeZoneInfo时区时间

    public TriggerBuilder StartAt(DateTimeOffset startTimeUtc)
    {
        startTime = startTimeUtc;
        return this;
    }
    public TriggerBuilder EndAt(DateTimeOffset? endTimeUtc)
    {
        endTime = endTimeUtc;
        return this;
    }

    不设置这些时间,则一直执行。

    3、制定Trigger和Job的关联关系。ForJob()

    4、UsingJobData  附加信息

    和JobBuilder中的一个作用。都是在具体执行的方法中可以拿到这个传进去的信息。

    5、优先级 WithPriority

    一个Job可以对应多个Trigger。当多个Trigger同一时间点出发,那么根据优先级判断。数字越大,优先级越高。

     默认优先级是5

    同一个任务有多个trigger。 

    触发先后顺序。

    时间->优先级->字母排序

    四大触发器

    每一个解决一类问题。 

    1、WithSimpleSchedule

    时分秒轮询,和timer一样。

    一直循环,循环多少次,循环多久。(两个维度 时间(时分秒)   次数)

    定时还钱,检查数据,更新状态等等。压缩redis等nosql进程内存。

    withrepeatcount(n)  重复n+1次  但是底层又把n-1  所以最后还是n次

    2、WithCalendarIntervalSchedule

    只是扩展了SimpleScheduleBuilder,由于SimpleScheduleBuilder只是对时分秒轮询扩展,可以对年月日周轮询

    3、WithDailyTimeIntervalSchedule

    某一些时间段内执行多长时间一次。

    每天8-10点 内 每半个小时执行一次

    t => t.OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8,00)).EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(10,00)).WithIntervalInMinutes(30)

    周一到周五  两点执行一次

    t => t.OnMondayThroughFriday ().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 00)).EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 10)).WithIntervalInHours(1)

    执行多少次结束

    EndingDailyAfterCount

    一周的哪几天

    OnDaysOfTheWeek(DayOfWeek.Friday,DayOfWeek.Monday)(周五  周一)

    4、WithCronSchedule

    最推荐的方法,是linux平台的时间格式。使用字符串符号表达时间。几乎现在任务组件都是使用的这种格式。

    ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").WithCronSchedule("0/5 * 8-22 ? * 1-5").Build();

    cron语法

    4.1、表达式分为七个部分


    秒                                      Seconds                                  0-59                                        , - * /
    分                                      Minutes                                   0-59                                        , - * / 
    小时                                   Hours                                      0-23                                        , - * /  
    月内日期                            Day-of-Month                         1-31                                        , - * ? / L W C          
    月                                       Month                                     1-12                                        , - * /
    周内日期                            Day-of-Week                          1-7                                          , - * ? / L C # 
    年(可选字段)                 Year (可选字段)                      1970-2099                              , - * /

    4.2、特殊字符含义

    *:表示整个时间

    /:表示增量    例如在秒上,

      1/5(从第一秒开始,每五秒执行一次)     1秒  6秒  11秒  ....

      0/5(从第零秒开始,每五秒执行一次)     0秒  5秒  10秒  ....

             /5(从第零秒开始,每五秒执行一次)     0秒  5秒  10秒  ....

            */5(从第零秒开始,每五秒执行一次)     0秒  5秒  10秒  ....

    , : 指定某几个值,假如放在秒伤  1,2,3,4   分别在第 1 2 3 4秒上执行。

    -: 指定范围。1-5  就是从 1到5

    ------------------------------------------------------------------------------------------------------------

    ?:用在月内日期和周内日期中,  表示用他们两个中的一个。

    #:用在周内日期上,表示该月第几个星期几   

    L:last 最后一个。每个月最后一天,或者每周最后一天

    W:week工作日。 15W  每月15号最近的那一个工作日

    C:这个是啥我也不知道。网上也没有找到。

    在线编辑器

    http://cron.qqe2.com/

  • 相关阅读:
    104每日博客
    924每日博客
    921每日博客
    928每日博客
    929每日博客
    930每日博客
    927每日博客
    大志非才不就,大才非学不成—我的博文资源汇总
    vue 项目搭建
    Vant 使用记录
  • 原文地址:https://www.cnblogs.com/wudequn/p/8506938.html
Copyright © 2020-2023  润新知