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/