Quartz學習之經常使用Trigger方法記錄

Trigger分類

Quartz中共包含有4種觸發器。併發

經常使用的是: SimpleTriggerCronTrigger
不經常使用的是:CalendarIntervalTriggerDailyTimeIntervalTrigger。雖而後面兩種用到的不是特別多,可是在特定的場景下,也是有不可替代的做用(具體看下官方文檔)。ide

CalendarIntervalTrigger: 根據一個給定的日曆時間進行重複,能夠設置啓動時間。它能夠完成 SimpleTrigger(好比每月,由於月不是一個肯定的秒數)和CronTrigger(好比5個月,由於5個月並非12個月的公約數)不能完成的一些任務。注意,使用month做爲週期單位時,若是起始日期是在某月的最後一天,好比1月31日,那麼下一個激活日在2月28日,之後全部的激活日都在當月的28日。若是你要嚴格限制在每個月的最後一天激活,那你須要使用cronTrigger。不受夏令時引發的時鐘偏移影響。ui

DailyTimeIntervalTrigger:在給定的時間窗口或指定的星期以秒、分鐘、小時爲週期進行重複。好比,天天早上8:00到11:00之間,每隔72分鐘激活;或者每週的週一到週五9:20到16:47之間,每隔23分鐘激活。this

SimpleTrigger 經常使用的方法記錄

SimpleTrigger的屬性包括:開始時間、結束時間、重複次數以及重複的間隔。code

重複次數,能夠是0、正整數,以及常量SimpleTrigger.REPEAT_INDEFINITELY。重複的間隔,必須是0,或者long型的正數,表示毫秒。注意,若是重複間隔爲0,trigger將會以重複次數併發執行(或者以scheduler能夠處理的近似併發數)。ci

指定時間開始觸發,不重複文檔

SimpleTrigger trigger = (SimpleTrigger) newTrigger() 
        .withIdentity("trigger1", "group1")
        .startAt(myStartTime)                     // some Date 
        .forJob("job1", "group1")                 // identify job with name, group strings
        .build();

指定時間觸發,每隔10秒執行一次,重複10次get

trigger = newTrigger()
        .withIdentity("trigger3", "group1")
        .startAt(myTimeToStartFiring)  // if a start time is not given (if this line were omitted), "now" is implied
        .withSchedule(simpleSchedule()
            .withIntervalInSeconds(10)
            .withRepeatCount(10)) // note that 10 repeats will give a total of 11 firings
        .forJob(myJob) // identify job with handle to its JobDetail itself                   
        .build();

當即觸發,每一個5分鐘執行一次,直到22:00:string

trigger = newTrigger()
        .withIdentity("trigger7", "group1")
        .withSchedule(simpleSchedule()
            .withIntervalInMinutes(5)
            .repeatForever())
        .endAt(dateOf(22, 0, 0))
        .build();

創建一個觸發器,將在下一個小時的整點觸發,而後每2小時重複一次:it

trigger = newTrigger()
        .withIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
        .startAt(evenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
        .withSchedule(simpleSchedule()
            .withIntervalInHours(2)
            .repeatForever())
        // note that in this example, 'forJob(..)' is not called which is valid 
        // if the trigger is passed to the scheduler along with the job  
        .build();

    scheduler.scheduleJob(trigger, job);

創建一個觸發器,將在下一個小時的整點觸發,而後每2小時重複一次

trigger = newTrigger()
        .withIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
        .startAt(evenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
        .withSchedule(simpleSchedule()
            .withIntervalInHours(2)
            .repeatForever())
        // note that in this example, 'forJob(..)' is not called which is valid 
        // if the trigger is passed to the scheduler along with the job  
        .build();

    scheduler.scheduleJob(trigger, job);

CronTrigger 經常使用的方法記錄

CronTrigger 一般比 Simple Trigger 更有用,若是須要基於日曆的概念而不是按照 SimpleTrigger 的精確指定間隔進行從新啓動的做業啓動計劃。

使用 CronTrigger ,能夠指定號時間表,例如「每週五中午」或「每一個工做日和上午9:30」,甚至「每週一至週五上午9:00至10點之間每5分鐘」和1月份的星期五「。

即便如此,和 SimpleTrigger 同樣,CronTrigger 有一個 startTime ,它指定什麼時候生效,以及一個(可選的)endTime,用於指定什麼時候中止計劃。

創建一個觸發器,每隔一分鐘,天天上午8點至下午5點之間

trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
    .forJob("myJob", "group1")
    .build();

創建一個觸發器,將在天天上午10:42執行

// 第一種實現方式
trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(dailyAtHourAndMinute(10, 42))
    .forJob(myJobKey)
    .build();
    
// 第二種實現方式
trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(cronSchedule("0 42 10 * * ?"))
    .forJob(myJobKey)
    .build();

創建一個觸發器,將在星期三上午10:42在TimeZone(系統默認值)以外執行

// 第一種方式
trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(weeklyOnDayAndHourAndMinute(DateBuilder.WEDNESDAY, 10, 42))
    .forJob(myJobKey)
    .inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
    .build();
    
// 第二種方式
  trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(cronSchedule("0 42 10 ? * WED"))
    .inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
    .forJob(myJobKey)
    .build();
相關文章
相關標籤/搜索