任務排程 Quartz

2021-08-28 06:37:19 字數 2826 閱讀 5495

首先,quartz是什麼:

先看看我們生活中的例子:

每月的2月21號提醒我今天是男朋友的生日;

每月的17號提醒我大姨媽快要來了;

每隔一小時提醒我起來走走運動運動;

就是在某乙個有規律的時間點乾某件事。並且時間的觸發的條件可以非常複雜(比如每月最後乙個工作日的17:50),複雜到需要乙個專門的框架來幹這個事。 quartz就是來幹這樣的事,你給它乙個觸發條件的定義,它負責到了時間點,觸發相應的job起來幹活。

來乙個簡單的例子:

public class quartztest  catch (exception e) 

}}

public class helloquartz implements job 

}

通過這個例子,我們看到這個任務主要有三個要素:

scheduler:排程器。所有的排程都有它控制。也就是上面3條生活例子由他他進行排程。

trigger :定義觸發的條件。如上面的例子中每月的2月21號、每月的17號、每隔一小時是由它定義。

trigger實現類:

******trigger:指定從某乙個時間開始,以一定的時間間隔(單位是毫秒)執行的任務。它適合的任務類似於:9:00 開始,每隔1小時,執行一次。

******schedule()

.withintervalinminutes(1) //每分鐘執行一次

.withrepeatcount(10) //次數為10次

.build();

calendarintervaltrigger:類似於******trigger,指定從某乙個時間開始,以一定的時間間隔執行的任務。 但是不同的是******trigger指定的時間間隔為毫秒,沒辦法指定每隔乙個月執行一次(每月的時間間隔不是固定值),而calendarintervaltrigger支援的間隔單位有秒,分鐘,小時,天,月,年,星期。它適合的任務類似於:9:00 開始執行,並且以後每週 9:00 執行一次

calendarintervalschedule()

.withintervalindays(1) //每天執行一次

.build();

calendarintervalschedule()

.withintervalinweeks(1) //每週執行一次

.build();

dailytimeintervaltrigger:指定每天的某個時間段內,以一定的時間間隔執行任務。並且它可以支援指定星期。它適合的任務類似於:指定每天9:00 至 18:00 ,每隔70秒執行一次,並且只要周一至周五執行。

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();

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();

crontrigger:適合於更複雜的任務,它支援型別於linux cron的語法(並且更強大)。基本上它覆蓋了以上三個trigger的絕大部分能力(但不是全部)—— 當然,也更難理解。它適合的任務類似於:每天0:00,9:00,18:00各執行一次。

cronschedule("0 0/2 8-17 * * ?") // 每天8:00-17:00,每隔2分鐘執行一次

.build();

cronschedule("0 30 9 ? * mon") // 每週一,9:30執行一次

.build();

weeklyondayandhourandminute(monday,9, 30) //等同於 0 30 9 ? * mon

.build();

乙個例項例子:

private triggerkey gettriggerkey(timer timer)

private jobkey getjobkey(timer timer)

@disallowconcurrentexecution// 同乙個jobdetail不可併發執行

public class quartzjob implements job catch (schedulerexception e)

}elseelseelse

} catch (ioexception e) }}

}private string formaturl(string url)

return url;}}

Quartz任務排程

id設定為自動獲取 每乙個必須不同 所有排程器例項中是唯一的 org.quartz.scheduler.instanceid auto 指定排程程式的主線程是否應該是守護執行緒 org.quartz.scheduler.makeschedulerthreaddaemon true threadpoo...

任務排程quartz

總共分三步 1 建立排程器scheduler 2 建立封裝job的jobdetail 3 用trigger把上邊他倆封裝起來 去start即可 3 構建trigger例項,定時執行的trigger trigger trigger triggerbuilder.newtrigger withident...

任務排程 Quartz框架

乙個簡單的例子 與spring的整合 實現job介面定義任務 在spring配置檔案中進行配置 在多數情況下應該使用crontrigger觸發器,結合cron表示式與calendar,calendar有一些實現類,如annualcalendar,monthlycalendar,weeklycalen...