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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM