我不確定您是否知道這一點,但是,所有工作都是jobkey唯一的。
讓我們開始對這個答案的公約
JOB - 這意味着一個石英工作
工作 - 石英作業類
正如我前面提到可以有隻有一個作業的一個實例。發生這種情況的是,每個作業由一個作業鍵定義,現在作業鍵始終是唯一的
這意味着通常您在JOB和作業之間有一對一的映射,即預定作業(Quartz作業和類實現接口作業
這是JOB - >作業
CASE 1
作業的
多個實例和工作不是多個實例
將看起來像
JOB A - > Job |
作業B - >招聘| ...........多個作業運行同一類
作業C - >招聘|
只要保持在同一jobgroup不同jobkey讓你工作的多個實例加載到您的調度
看一看JobFactory因爲
一個的JobFactory負責生產工作的情況下,類。
..
CASE 2
現在來作業的實例。根據您的日程安排和JOB的執行時間,可能會有多個併發運行的實例(將其稱爲多個實例更好的術語將是併發執行是不恰當的)。爲了避免你將不得不編寫一些自定義邏輯。 或使用註釋DisallowConcurrentExecution。
加載具有DisallowConcurrentExecution的CASE 1中所示的Job的5個實例。但這將意味着5個不必要的事例,儘管在某個時候可能不需要這項工作。
CASE 3
現在讓我們來考慮設置初始化爲1.自定義邏輯可以幫助處理這個
開始之前,你工作的標誌。您可以檢查該標誌是否小於5.如果小於5則進入主業務邏輯並增加標誌值。在塊出來之前執行結束後遞減它。這樣,即使您有多個JOB正在運行,也不會執行業務邏輯。
private static int jobRunningFlag = 0;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
if(JobName.jobRunningFlag <= 5)
{
JobName.jobRunningFlag++
.....execute this piece of code....
JobName.jobRunningFlag--
}
}
顯然jobRunningFlag將存儲在同一個作業類的靜態變量
PS: 更多的答案,這將根據您的意見。你看過JobFactory和相關的類/接口嗎?你有什麼嘗試。我的想法是這將完全落實到你的實現邏輯上。我對石英不太瞭解,對他們沒有太多的想法。
我的情況是許多石英工作JOB單一工作(Quartz類)塞納里奧。 工作(石英工作) - >工作(石英班) 多對一 我已經把我所有的「Applier」班放在同一組裏。 我也把觸發器放在同一組中。 我嘗試使用JobListner進行控制,但Quartz的「調度程序」類的「pauseJob」不適用於僅執行一次執行的計劃的JOB。 我無法找到任何可以「暫停」特定組執行的機制。 我也檢查「JobFactory」,但它在我的情況下也沒有用。 – Hitesh