由於job每次被執行時都會建立乙個新的例項,
jobdetail例項時,要進行資料儲存或者,特殊字段操作,需要每次schedul執行job時保留之前的資料,
那麼就需要job在有狀態下保持之前的資料資訊,從而避免每次scheduler從新建立新的例項的無狀態、
jobdetail jobdetail = jobbuilder.newjob(quartzjob.class).withidentity("myjob", "group")
//jobdatamap 在構建jobdetail時,可以將資料放入jobdatamap,
.usingjobdata("jobsays", "hello world!")
.usingjobdata("myfloatvalue", 3.14f)
.usingjobdata("count", 0)
.build();
/*** :將該註解加到job類上,告訴quartz不要併發地執行同乙個job定義(這裡指特定的job類)的多個例項。
* 請注意這裡的用詞。拿前一小節的例子來說,
* 如果「salesreportjob」類上有該註解,
* 則同一時刻僅允許執行乙個「salesreportforjoe」例項,
* 但可以併發地執行「salesreportformike」類的乙個例項。
* 所以該限制是針對jobdetail的,而不是job類的。
* 但是我們認為(在設計quartz的時候)應該將該註解放在job類上,
* 因為job類的改變經常會導致其行為發生變化。
*/@disallowconcurrentexecution //以上是官方文件一堆廢話,總結一句就是,限制job的例項(jobdetai)被併發執行
/**此註解* 多次呼叫job時都會對job進行持久化,即儲存一些特定資訊
沒有此註解每次例項都會建立乙個jobdatamap不會儲存上次建立的資訊*/@persistjobdataafterexecution
public class quartzjob implements job
}myjob被第1次呼叫
myjob被第2次呼叫
myjob被第3次呼叫
記錄jobdetail狀態
檢視Quartz 排程任務 job 的狀態
首先 明確一點什麼是 jobkey jobkey jobkey new jobkey name,group jobkey相當於一把鑰匙連線 所有從 schedule 中 獲取 資訊的鑰匙 如果想獲取 初始化資訊 則scheduler.getjobdetail jobkey getjobdatamap...
併發之競爭狀態
如果兩個或者多個 goroutine 在沒有互相同步的情況下,訪問某個共享的資源,並試圖同時讀和寫這個資源,就處於相互競爭的狀態。這種情況被稱作競爭狀態。要想解決競爭狀態,對乙個共享資源的讀和寫操作必須是原子化的。也就是說,同一時刻只能有乙個 goroutine 對共享資源進行讀和寫操作。可見 為 ...
獲取Quartz中Job的執行狀態
使用quartz定時排程job,經常需要實時監控job的執行狀態。在這裡,quartz提供了gettriggerstate方法來獲取當前執行狀態。其中返回值分別代表意思如下 state blocked 4 阻塞 state complete 2 完成 state error 3 錯誤 state n...