Quartz.NET經常使用方法 01

 Quartz.NET做爲一款定時框架,它的最小可運行程序以下:javascript

    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
相關文章
相關標籤/搜索