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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Quartz-Trigger详解

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz-Trigger详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 觸發器接口基本介紹
  • 通用 Trigger 屬性
    • Priority
    • misfire:錯過觸發機制
    • Calendar
  • Trigger 觸發器實現類
  • 調度器建造者
  • Trigger實現類
    • SimpleTrigger
    • CalendarIntervalTrigger
    • DailyTimeIntervalTrigger
    • CronTrigger
    • NthIncludedDayTrigger

概述

我們先回顧下Quartz API核心接口

  • Scheduler:(調度器)與scheduler交互的主要API;
  • Job:(作業)你通過scheduler執行任務,你的任務類需要實現的接口;
  • JobDetail:(作業實例)定義Job的實例;
  • Trigger:(觸發器)觸發Job的執行;
  • JobBuilder:定義和創建JobDetail實例的接口;
  • TriggerBuilder:定義和創建Trigger實例的接口;

類似于 Job,Trigger 也非常容易使用,但是它包含了大量的自定義選項,你需要了解它們才能完全使用 Quartz。并且,Trigger 本身有很多不同的實現,你需要根據具體情況進行選擇。


觸發器接口基本介紹

// 觸發器狀態 TriggerState |-public enum TriggerState { NONE, NORMAL, PAUSED, COMPLETE, ERROR, BLOCKED } |-NONE 無 |-NORMAL 正常狀態 |-PAUSED 暫停狀態 |-COMPLETE 完成 |-ERROR 錯誤|-BLOCKED 堵塞// 執行完成時狀態 CompletedExecutionInstruction|- public enum CompletedExecutionInstruction { NOOP, RE_EXECUTE_JOB, SET_TRIGGER_COMPLETE, DELETE_TRIGGER, SET_ALL_JOB_TRIGGERS_COMPLETE, SET_TRIGGER_ERROR, SET_ALL_JOB_TRIGGERS_ERROR } |-NOOP 無 |-RE_EXECUTE_JOB 重復執行 |-SET_TRIGGER_COMPLETE 觸發器執行完成 |-DELETE_TRIGGER 刪除觸發器 |-SET_ALL_JOB_TRIGGERS_COMPLETE 所有作業和觸發器執行完成 |-SET_TRIGGER_ERROR 觸發器執行錯誤 |-SET_ALL_JOB_TRIGGERS_ERROR 設置所有都是錯誤的 TriggerTimeComparator getKey 獲取觸發器key值 getJobKey 獲取作業key getDescription 獲取面熟 getCalendarName 獲取日歷名稱 getJobDataMap 獲取作業數據map getPriority 獲取優先級 mayFireAgain 是否重復執行 getStartTime 開始時間 getEndTime 結束時間 getNextFireTime 下一次執行時間 getPreviousFireTime 上一執行時間 getFireTimeAfter(Date afterTime) 獲取某個時間后的運行時間 getFinalFireTime 獲取最后執行時間 getMisfireInstruction 獲取失敗策略 getTriggerBuilder 獲取觸發器建造者 getScheduleBuilder 獲取調度類建造者 equals compareTo// 失敗策略 MISFIRE_INSTRUCTION_SMART_POLICY MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY DEFAULT_PRIORITY

通用 Trigger 屬性

先不說所有 Trigger 都有 TriggerKey 屬性用于跟蹤唯一標識。

所有的 Trigger 還有另一些通用的其它屬性。這些通用屬性可以在你定義 Trigger 的時候使用 TriggerBuilder 進行設置。(后面有例子)

  • jobKey 屬性表示當 trigger 觸發的時候,被執行的 Job 的唯一標識。

  • startTime 屬性表示 trigger 的時間表中開始進行關注的時間。這個值是 java.util.Date 類型的對象。 對于有的Trigger 類型來說,它們將會在這個時間被觸發,另外的一些 Trigger 只是簡單地將這個時間標記為開始關注的時間,這意味著你可以在1 月份的時候設置觸發器為“每月 5 日執行”,并且設置 startTime 為 4 月 1 日,那么距離這個觸發器觸發還有幾個月的時間。

  • endTime 屬性表示 Trigger 中的時間表不再進行關注的時間。例如,如果你設置了“每月 5 日執行”的觸發器,如果將 endTime 設置為 7 月 1 日,那么這個觸發器最后一次觸發將會是 6 月 5 日。


Priority

有的時候,當你有多個 Trigger(或者在 Quartz 線程池中有多個工作線程),Quartz 可能沒有足夠的資源同時觸發所有觸發器上的任務。在這種情況下,你可能想控制你的哪個 Trigger 將會在 Quartz 工作線程中第一個被觸發。為了滿足這個需求,你可以設置 Trigger 的 priority 屬性。如果有 N 個 Trigger 同時被觸發,而當時只有 Z 個工作線程,那么前 Z 個 priority 最高的 Trigger 將會被觸發。如果沒有設置這個屬性,默認值是 5。這個屬性接受所有整數,正數或負數都合法。

注意:Priority 只會在同時觸發 Trigger 的時候進行比較。10:59 觸發的 Trigger 總是比 11:00 觸發的 Trigger早執行,不管它們的 priority 值是多少。

注:如果 trigger 上的 job 需要恢復,那么恢復后會使用原始 trigger 相同的 priority。


misfire:錯過觸發機制

Trigger 上的另一個很重要的屬性是“錯過觸發指令”。當調度器停止或在 Quartz 線程池中沒有可用的線程可以執行任務的時候,就有可能發成錯過觸發(應該觸發而沒有觸發)。

不同的 Trigger 類型有它們各自不同的錯過觸發機制。默認情況下,使用“smart policy”機制-這是基于 Trigger 類型和配置的動態行為。

當調度器啟動的時候,它會檢索是否有 trigger 錯過觸發,然后將會基于它們獨立配置的錯過觸發機制進行更新。當你在自己的項目中使用 Quartz 的時候,你需要熟悉你使用的 trigger 類型的錯過觸發機制,在它們的 JavaDoc 中都有詳細說明。


Calendar

Quartz Calendar 對象(不是 java.util.Calendar 對象)可以在定義 Trigger 的時候關聯到 Trigger,并保存到調度器中。

使用 Calendar 可以很方便的在觸發周期內去除某些時間。例如,你可以創建一個 trigger,并設置在每個工作日的上午 9:30 被觸發,然后可以添加 Calendar 來去除所有的節假日。

Calendar 可以是任何實現 Calendar 接口的可序列化對象。

Calendar 接口:

package org.quartz;public interface Calendar {public boolean isTimeIncluded(long timeStamp);public long getNextIncludedTime(long timeStamp);}

注意,這些方法的參數都是 long 類型,正如你所料,它們表示毫秒時間戳。 這意味著使用 calendar 可以定義的時間最小單位是毫秒,你可能感興趣的是 Quartz 如何定義一整天,為了方便,Quartz 提供了 org.quartz.impl.HolidayCalendar 來做這個工作。

Calendars 必須實例化并通過 addCalendar() 方法注冊到調度器。如果你使用 HolidayCalendar,實例化之后,可以調用 addExcludedDate(Date date) 方法在運行周期中去除某些日期。相同的 Calendar 可以由多個 Trigger 使用:

HolidayCalendar cal = new HolidayCalendar(); cal.addExcludedDate( someDate ); cal.addExcludedDate( someOtherDate );sched.addCalendar("myHolidays", cal, false);Trigger t = newTrigger().withIdentity("myTrigger").forJob("myJob").withSchedule(dailyAtHourAndMinute(9, 30)) // execute job daily at 9:30.modifiedByCalendar("myHolidays") // but not on holidays.build();// .. schedule job with triggerTrigger t2 = newTrigger().withIdentity("myTrigger2").forJob("myJob2").withSchedule(dailyAtHourAndMinute(11, 30)) // execute job daily at 11:30.modifiedByCalendar("myHolidays") // but not on holidays.build();// .. schedule job with trigger2

上面的代碼創建了兩個 trigger,都是每日觸發。然而,在設置的 calendar 周期內的觸發將會被忽略。

org.quartz.impl.calendar 包中有更多的 Calendar 實現可以滿足你的需要。


Trigger 觸發器實現類

Trigger (org.quartz) |-CalendarIntervalTrigger (org.quartz) 日期觸發器 | |-CalendarIntervalTriggerImpl (org.quartz.impl.triggers) | |-MutableTrigger (org.quartz.spi) | |-OperableTrigger (org.quartz.spi) | |-AbstractTrigger (org.quartz.impl.triggers) | |-CalendarIntervalTriggerImpl (org.quartz.impl.triggers) | |-SimpleTriggerImpl (org.quartz.impl.triggers) | |-DailyTimeIntervalTriggerImpl (org.quartz.impl.triggers) | |-CronTriggerImpl (org.quartz.impl.triggers)||-SimpleTrigger (org.quartz) 簡單觸發器 | |-SimpleTriggerImpl (org.quartz.impl.triggers) ||-CoreTrigger (org.quartz.impl.triggers) | |-CalendarIntervalTriggerImpl (org.quartz.impl.triggers) | |-SimpleTriggerImpl (org.quartz.impl.triggers) | |-DailyTimeIntervalTriggerImpl (org.quartz.impl.triggers) | |-CronTriggerImpl (org.quartz.impl.triggers)||-CronTrigger (org.quartz) cron表達式 | |-CronTriggerImpl (org.quartz.impl.triggers) ||-DailyTimeIntervalTrigger (org.quartz)日期觸發類() |-DailyTimeIntervalTriggerImpl (org.quartz.impl.triggers)

常用的觸發器有下面四個

  • SimpleTrigger:簡單的觸發器

  • CalendarIntervalTrigger:日歷觸發器

  • CronTrigger:Cron表達式觸發器

  • DailyTimeIntervalTrigger:日期觸發器


調度器建造者

這里源碼中利用了建造者模式

// 用于創建各個調度器 ScheduleBuilder (org.quartz) |-CalendarIntervalScheduleBuilder (org.quartz) |-DailyTimeIntervalScheduleBuilder (org.quartz) |-SimpleScheduleBuilder (org.quartz) |-CronScheduleBuilder (org.quartz) private TriggerBuilder() 構造函數私有 public static TriggerBuilder<Trigger> newTrigger() 創建一個建造者build() 創建觸發器// 根據name和默認的group(即"DEFAULT_GROUP")創建trigger的key public TriggerBuilder<T> withIdentity(String name) public TriggerBuilder<T> withIdentity(String name, String group) public TriggerBuilder<T> withIdentity(TriggerKey triggerKey)// 描述 public TriggerBuilder<T> withDescription(String triggerDescription) // 優先級 public TriggerBuilder<T> withPriority(int triggerPriority) //日期 public TriggerBuilder<T> modifiedByCalendar(String calName) //開始時間 public TriggerBuilder<T> startAt(Date triggerStartTime) //立即執行 public TriggerBuilder<T> startNow() //結束時間 public TriggerBuilder<T> endAt(Date triggerEndTime) //調度器 public <SBT extends T> TriggerBuilder<SBT> withSchedule(ScheduleBuilder<SBT> schedBuilder) //設置作業 public TriggerBuilder<T> forJob(JobKey keyOfJobToFire) public TriggerBuilder<T> forJob(String jobName) public TriggerBuilder<T> forJob(String jobName, String jobGroup) public TriggerBuilder<T> forJob(JobDetail jobDetail) usingJobData(----,----) 設置作業內容key description startTime endTime priority Trigger.DEFAULT_PRIORITY calendarName jobKey jobDataMap scheduleBuilder

SimpleScheduleBuilder 簡單的調度器創建者

分析源碼中的方法和屬性

//構造函數私有化 protected SimpleScheduleBuilder() //獲取簡單調度器 public static SimpleScheduleBuilder simpleSchedule()/***********************/ // 1分鐘執行(一直執行) public static SimpleScheduleBuilder repeatMinutelyForever() //每隔幾分鐘執行(一直執行) public static SimpleScheduleBuilder repeatMinutelyForever(int minutes) // 1秒執行(一直執行) public static SimpleScheduleBuilder repeatSecondlyForever() //每隔幾秒鐘執行(一直執行) public static SimpleScheduleBuilder repeatSecondlyForever(int seconds) // 1小時執行(一直執行) public static SimpleScheduleBuilder repeatHourlyForever() //每隔幾小時鐘執行(一直執行) public static SimpleScheduleBuilder repeatHourlyForever(int hours) /***********************/ //間隔時間為1分鐘,總的執行次數為count public static SimpleScheduleBuilder repeatMinutelyForTotalCount(int count) //間隔時間為幾分鐘,總的執行次數為count ............. public static SimpleScheduleBuilder repeatMinutelyForTotalCount(int count, int minutes) public static SimpleScheduleBuilder repeatSecondlyForTotalCount(int count) public static SimpleScheduleBuilder repeatSecondlyForTotalCount(int count, int seconds) public static SimpleScheduleBuilder repeatHourlyForTotalCount(int count) public static SimpleScheduleBuilder repeatHourlyForTotalCount(int count, int hours)/***********************/ public MutableTrigger build() 創建一個Trigger/***********************/ // 幾秒鐘重復執行 public SimpleScheduleBuilder withIntervalInMilliseconds(long intervalInMillis) public SimpleScheduleBuilder withIntervalInSeconds(int intervalInSeconds) public SimpleScheduleBuilder withIntervalInMinutes(int intervalInMinutes) public SimpleScheduleBuilder withIntervalInHours(int intervalInHours)/***********************/// 重復執行冊數 public SimpleScheduleBuilder withRepeatCount(int triggerRepeatCount)/***********************///以錯過的第一個頻率時間立刻開始執行 //重做錯過的所有頻率周期后 //當下一次觸發頻率發生時間大于當前時間后,再按照正常的Cron頻率依次執行 public SimpleScheduleBuilder withMisfireHandlingInstructionIgnoreMisfires()//以當前時間為觸發頻率立即觸發執行 //執行至FinalTIme的剩余周期次數 //以調度或恢復調度的時刻為基準的周期頻率,FinalTime根據剩余次數和當前時間計算得到 //調整后的FinalTime會略大于根據starttime計算的到的FinalTime值 public SimpleScheduleBuilder withMisfireHandlingInstructionFireNow()//不觸發立即執行 //等待下次觸發頻率周期時刻,執行至FinalTime的剩余周期次數 //以startTime為基準計算周期頻率,并得到FinalTime //即使中間出現pause,resume以后保持FinalTime時間不變 public SimpleScheduleBuilder withMisfireHandlingInstructionNextWithExistingCount()//不觸發立即執行 //等待下次觸發頻率周期時刻,執行至FinalTime的剩余周期次數 //以startTime為基準計算周期頻率,并得到FinalTime //即使中間出現pause,resume以后保持FinalTime時間不變 public SimpleScheduleBuilder withMisfireHandlingInstructionNextWithRemainingCount()//以當前時間為觸發頻率立即觸發執行 //執行至FinalTIme的剩余周期次數 //以調度或恢復調度的時刻為基準的周期頻率,FinalTime根據剩余次數和當前時間計算得到 //調整后的FinalTime會略大于根據starttime計算的到的FinalTime值 public SimpleScheduleBuilder withMisfireHandlingInstructionNowWithExistingCount()//以當前時間為觸發頻率立即觸發執行 //執行至FinalTIme的剩余周期次數 //以調度或恢復調度的時刻為基準的周期頻率,FinalTime根據剩余次數和當前時間計算得到 public SimpleScheduleBuilder withMisfireHandlingInstructionNowWithRemainingCount()interval 時間間隔 repeatCount 重復時間 misfireInstruction

CronScheduleBuilder Corn調度器創建者
源碼分析

// 構造函數私有化 protected CronScheduleBuilder(CronExpression cronExpression)public MutableTrigger build()// 根據cron表達式建造 public static CronScheduleBuilder cronSchedule(String cronExpression)// 核查表達式是否正確 public static CronScheduleBuilder cronScheduleNonvalidatedExpression(String cronExpression) throws ParseException//表達式異常 cronScheduleNoParseException// 利用CronExpression建造 public static CronScheduleBuilder cronSchedule(CronExpression cronExpression)//每天在指定的時間執行,根據這個調度創建一個cron表達式 public static CronScheduleBuilder dailyAtHourAndMinute(int hour, int minute)// 通過`分鐘`、`小時`、`周`創建一個CronScheduleBuilder實例,即在某一天的給定時刻 // (通過`分鐘`、`小時`指定)執行,,而天數由`周`確定,如果“周二、周四的10:05“等; public static CronScheduleBuilder atHourAndMinuteOnGivenDaysOfWeek(int hour, int minute, Integer... daysOfWeek)//調度計劃:每周的某一天,在指定的時間(小時和分鐘)執行 public static CronScheduleBuilder weeklyOnDayAndHourAndMinute(int dayOfWeek, int hour, int minute)//調度計劃:每月的某一天,在指定的時間(小時和分鐘)執行 public static CronScheduleBuilder monthlyOnDayAndHourAndMinute(int dayOfMonth, int hour, int minute)//設置時區 public CronScheduleBuilder inTimeZone(TimeZone timezone)// 設置處理辦法 public CronScheduleBuilder withMisfireHandlingInstructionIgnoreMisfires() public CronScheduleBuilder withMisfireHandlingInstructionDoNothing() public CronScheduleBuilder withMisfireHandlingInstructionFireAndProceed()cronExpression misfireInstruction

CalendarIntervalScheduleBuilder 日歷間隔計劃生成器

CalendarIntervalScheduleBuilder calendarIntervalSchedule build// 和DailyTimeIntervalScheduleBuilder差不多 public CalendarIntervalScheduleBuilder withInterval(int timeInterval, IntervalUnit unit) withIntervalInSeconds withIntervalInMinutes withIntervalInHours withIntervalInDays withIntervalInWeeks withIntervalInMonths withIntervalInYearswithMisfireHandlingInstructionIgnoreMisfires withMisfireHandlingInstructionDoNothing withMisfireHandlingInstructionFireAndProceed inTimeZonepreserveHourOfDayAcrossDaylightSavings skipDayIfHourDoesNotExist validateInterval interval intervalUnit misfireInstruction timeZone preserveHourOfDayAcrossDaylightSavings skipDayIfHourDoesNotExist

DailyTimeIntervalScheduleBuilder

DailyTimeIntervalScheduleBuilder()dailyTimeIntervalSchedule()build()withInterval(int timeInterval, IntervalUnit unit) //執行時間間隔觸發執行,unit時間單位 withIntervalInSeconds(int intervalInSeconds) //秒 withIntervalInMinutes(int intervalInMinutes) //分鐘 withIntervalInHours(int intervalInHours) //小時 // 周幾執行 onDaysOfTheWeek(Set<Integer> onDaysOfWeek) onDaysOfTheWeek(Integer... onDaysOfWeek)onMondayThroughFriday() onSaturdayAndSunday() onEveryDay()startingDailyAt(TimeOfDay timeOfDay) // 開始觸發時間 endingDailyAt(TimeOfDay timeOfDay) //結束時間 endingDailyAfterCount(int count) withMisfireHandlingInstructionIgnoreMisfires() withMisfireHandlingInstructionDoNothing() withMisfireHandlingInstructionFireAndProceed()//重復次數 withRepeatCount() validateInterval()// 常量等 interval intervalUnit daysOfWeek startTimeOfDay endTimeOfDay repeatCount misfireInstruction ALL_DAYS_OF_THE_WEEK MONDAY_THROUGH_FRIDAY SATURDAY_AND_SUNDAY

Trigger實現類

SimpleTrigger

一個quartz簡單的觸發器。指定從某一個時間開始,以一定的時間間隔(單位是毫秒)執行的任務。

它適合的任務類似于:9:00 開始,每隔1小時,每隔幾分鐘,每隔幾秒鐘執行一次。

它的屬性有:

  • repeatInterval:重復間隔
  • repeatCount:重復次數。實際執行次數是 repeatCount+1。因為在startTime的時候一定會執行一次。

官網介紹:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-05.html

import org.quartz.*; import java.text.SimpleDateFormat; import java.util.Date;public class SimpleTriggerMain {public static void main(String[] args) throws SchedulerException {// 獲取一個調度工廠SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();// 獲取一個調度器Scheduler sched = schedFact.getScheduler();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();// 在當前時間15秒后運行Date startTime = DateBuilder.nextGivenSecondDate(new Date( ),15);// 創建一個SimpleTrigger實例,指定該Trigger在Scheduler中所屬組及名稱。// 接著設置調度的時間規則.當前時間15秒后運行,每10秒運行一次,共運行5次SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(5)).build();sched.scheduleJob(job, trigger);// 調度啟動sched.start();} }

CalendarIntervalTrigger

類似于SimpleTrigger,指定從某一個時間開始,以一定的時間間隔執行的任務。 但是不同的是SimpleTrigger指定的時間間隔為毫秒,沒辦法指定每隔一個月執行一次(每月的時間間隔不是固定值),而CalendarIntervalTrigger支持的間隔單位有秒,分鐘,小時,天,月,年,星期。

相較于SimpleTrigger有兩個優勢:

  • 1、更方便,比如每隔1小時執行,你不用自己去計算1小時等于多少毫秒。
  • 2、支持不是固定長度的間隔,比如間隔為月和年。但劣勢是精度只能到秒。

它適合的任務類似于:9:00 開始執行,并且以后每周 9:00 執行一次

它的屬性有:

  • interval:執行間隔
  • intervalUnit:執行間隔的單位(秒,分鐘,小時,天,月,年,星期)
// 每兩秒執行 CalendarIntervalTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withInterval(2, DateBuilder.IntervalUnit.SECOND) ).build();

DailyTimeIntervalTrigger

指定每天的某個時間段內,以一定的時間間隔執行任務。并且它可以支持指定星期。

它適合的任務類似于:指定每天9:00 至 18:00 ,每隔70秒執行一次,并且只要周一至周五執行。

它的屬性有:

  • startTimeOfDay:每天開始時間

  • endTimeOfDay:每天結束時間

  • daysOfWeek:需要執行的星期

  • interval:執行間隔

  • intervalUnit:執行間隔的單位(秒,分鐘,小時,天,月,年,星期)

  • repeatCount:重復次數

DailyTimeIntervalTrigger trigger = dailyTimeIntervalSchedule().startingDailyAt(TimeOfDay.hourAndMinuteOfDay(9, 0)) // 第天9:00開始.endingDailyAt(TimeOfDay.hourAndMinuteOfDay(16, 0)) // 16:00 結束 .onDaysOfTheWeek(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY) // 周一至周五執行.withIntervalInHours(1) // 每間隔1小時執行一次.withRepeatCount(100) // 最多重復100次(實際執行100+1次).build();DailyTimeIntervalTrigger trigger = dailyTimeIntervalSchedule().startingDailyAt(TimeOfDay.hourAndMinuteOfDay(9, 0)) // 第天9:00開始.endingDailyAfterCount(10) // 每天執行10次,這個方法實際上根據 startTimeOfDay+interval*count 算出 endTimeOfDay.onDaysOfTheWeek(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY) // 周一至周五執行.withIntervalInHours(1) // 每間隔1小時執行一次.build();// 每兩秒執行 DailyTimeIntervalTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule().withInterval(2, DateBuilder.IntervalUnit.SECOND) ).build();

CronTrigger

適合于更復雜的任務,它支持類型于Linux Cron的語法(并且更強大)。基本上它覆蓋了以上三個Trigger的絕大部分能力(但不是全部)

CronTrigger 允許設定非常復雜的觸發時間表。然而有時也許不得不使用兩個或多個 SimpleTrigger 來滿足你的觸發需求,這時候你僅僅需要一個CronTrigger 實例就夠了。

它的屬性只有: Cron表達式

// 每兩秒執行 CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("/2 * * * * ?") ).build();

NthIncludedDayTrigger

org.quartz.NthIncludedDayTrigger 是 Quartz 開發團隊最新加入到框架中的一個 Trigger。它設計用于在每一間隔類型的第幾天執行 Job。

例如,你要在每個月的 15 號執行開票的 Job,用 NthIncludedDayTrigger 就再合適不過了。Quartz 的 Caldendar 也可與 Trigger 關聯以此把周末與節假日考慮進來,并在必要時跳開這些日期。

NthIncludedDayTrigger trigger = new NthIncludedDayTrigger("MyTrigger", Scheduler.DEFAULT_GROUP); trigger.setN(15); trigger.setIntervalType(NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY);

總結

以上是生活随笔為你收集整理的Quartz-Trigger详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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