JOB狀態與併發

2022-03-11 23:37:53 字數 1180 閱讀 3378

由於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...