日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)

發布時間:2023/12/10 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 簡介

1. 幾個類型:

  ①:TriggerBuilder:用來創建ITrigger實例

  ②:ITrigger:觸發器實例

2.常用的幾個方法

  ①.StartNow:Trigger馬上觸發.

  ②.StartAt和EndAt:設置Trigger觸發的開始時間和結束時間 (省略設置開始時間的話,默認從當前時間開始執行)

  ③.UsingJobData:給Trigger添加一些附加值(通過context.Trigger.JobDataMap獲取)

  ④.WithDescription:用來描述該觸發器,并沒有什么實際左右

  ⑤.WithPriority:設置Trigger的優先級,默認為5,數字越大,優先級越高.(該優先級用于一個job對應多個Trigger,且Trigger的觸發時間相同,優先級越大的越先執行)

  ⑥.ForJob:將job和trigger進行關聯,該方法有多個重載,關聯后ScheduleJob方法進行調度時,只需將trigger傳入進去即可

?

二. ?Job和Trigger關聯問題

(1). 1個job對應1個trigger:調用ScheduleJob(IJobDetail jobDetail, ITrigger trigger),直接關聯即可,無須做特別處理

(2). 1個job對應多個trigger:有兩種方案解決

  方案A: 將job持久化(StoreDurably(true)),然后通過AddJob方法加入調度池中,Trigger上通過ForJob方法和指定job進行關聯,然后調用ScheduleJob(ITrigger trigger)方法,將trigger全部加入調度池中,最后Start開啟即可

  方案B: 創建job和trigger都不需要關聯,也不需要特殊設置,最后將trigger加入一個HashSet<ITrigger>池中,通過一次性通過 ScheduleJob(IJobDetail jobDetail, Collection.ISet<ITrigger> triggersForJob, bool replace)進行關聯

(3). 2個job對應1個trigger (不常用)

  利用JobChainingJobListener實現

?代碼分享:

1 //1. 創建Schedule2 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();3 //2. 創建Job4 var job1 = JobBuilder.Create<HelloJob3>()5 .WithIdentity("job1", "jobGroup1")6 .StoreDurably(true)7 .Build();8 var job2 = JobBuilder.Create<HelloJob>()9 .WithIdentity("job2", "jobGroup2") 10 .StoreDurably(true) 11 .Build(); 12 /********************************* 下面測試job和 Trigger的關聯問題 (與下面Trigger優先級的測試互不影響)**************************************/ 13 14 #region 情況1:1個job對應1個trigger 15 { 16 var trigger = TriggerBuilder.Create() 17 .UsingJobData("name", "ypf1") //附加信息 18 .UsingJobData("age", "age1") 19 .StartAt(DateBuilder.EvenSecondDateAfterNow()) //表示下一個秒整點開啟,比如現在9點19分20秒,那么9點20分21s整開啟 20 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) 21 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后結束 22 .Build(); 23 scheduler.ScheduleJob(job1, trigger); 24 scheduler.Start(); 25 } 26 #endregion 27 28 #region 情況2:1個job對應多個Trigger 29 //方案1 30 { 31 var trigger1 = TriggerBuilder.Create() 32 .UsingJobData("name", "ypf1") //附加信息 33 .UsingJobData("age", "age1") 34 .StartNow() //馬上開啟 35 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) //每隔兩秒執行一次 36 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后結束 37 .ForJob("job1", "jobGroup1") //通過表名和組名進行關聯 38 .Build(); 39 var trigger2 = TriggerBuilder.Create() 40 .UsingJobData("name", "ypf2") //附加信息 41 .UsingJobData("age", "age2") 42 .StartNow() //馬上開啟 43 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //每隔5秒執行一次 44 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后結束 45 .ForJob(job1) //直接IJobDetail關聯 46 .Build(); 47 48 scheduler.AddJob(job1, true); 49 scheduler.ScheduleJob(trigger1); 50 scheduler.ScheduleJob(trigger2); 51 scheduler.Start(); 52 } 53 //方案2 54 { 55 var trigger1 = TriggerBuilder.Create() 56 .UsingJobData("name", "ypf1") //附加信息 57 .UsingJobData("age", "age1") 58 .StartNow() //馬上開啟 59 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) //每隔兩秒執行一次 60 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后結束 61 .Build(); 62 var trigger2 = TriggerBuilder.Create() 63 .UsingJobData("name", "ypf2") //附加信息 64 .UsingJobData("age", "age2") 65 .StartNow() //馬上開啟 66 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //每隔5秒執行一次 67 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后結束 68 .Build(); 69 70 Quartz.Collection.HashSet<ITrigger> triggerHash = new Quartz.Collection.HashSet<ITrigger>(); 71 triggerHash.Add(trigger1); 72 triggerHash.Add(trigger2); 73 scheduler.ScheduleJob(job1, triggerHash, true); 74 scheduler.Start(); 75 } 76 #endregion 77 78 #region 情況3:2個job對應1個trigger 79 { 80 //每s執行一次 81 var trigger = TriggerBuilder.Create().WithCronSchedule("/1 * * * * ?").Build(); 82 83 JobChainingJobListener listener = new JobChainingJobListener("mytest"); 84 listener.AddJobChainLink(job1.Key, job2.Key); 85 scheduler.ListenerManager.AddJobListener(listener); 86 87 scheduler.AddJob(job2, true); 88 scheduler.ScheduleJob(job1, trigger); 89 scheduler.Start(); 90 } 91 #endregion

?

三.?Trigger的優先級(未完)

?  利用WithPriority方法,該優先級用于一個job對應多個Trigger,且Trigger的觸發時間相同,優先級越大的越先執行。

總結

以上是生活随笔為你收集整理的第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。