Quartz.NET作為一款定時框架,它的最小可運行程式如下:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/87798.html
標籤:C#
