2012-10-16 93 views
1

我想在跨觸發器運行相同作業的持續重試計數數據。Quartz JobExecutionContext在兵馬俑jobstore中運行時不會持久

我試着將它存儲到JobExectionContext.JobDetails.JobDataMap中,這是一個DirtyHashMap。它被存儲,但當第二次由不同的觸發器運行同一作業時,並且如果該觸發器更新了同一個鍵的值,則它不會持續存在。所以,當你第三次訪問它時,鍵值仍然與第一個一樣。

注:確實,當我在兵馬俑正常,不運行它,工作中使用的作業類

這裏@PersistJobDataAfterExecution是一個僞代碼:

Cron觸發器,1: 在CronTrigger.executionComplete() >如果失敗>增量RetryCount重,並將其設置在jobcontext的JobDataMap>新SimpleTrigger 重新安排同樣的工作(重試次數在上下文中0,新的值設爲1)

簡單觸發器1: 在SimpleTrigger.executionComplete()>如果失敗>增量RetryCount重,並將其設置在jobcontext的JobDataMap>新SimpleTrigger 重新安排同樣的工作(重試次數在上下文中1,新的值設爲2)

簡單觸發器2: 在SimpleTrigger.executionComplete()>如果失敗>增量RetryCount重和其設置在jobcontext的JobDataMap>新SimpleTrigger

(重試上下文數仍爲1,新的值設爲2)

這就是問題的所在,重試次數後不增加重新安排同樣的工作,其第一次設置。再次,這隻會發生在赤陶jobstore中運行。堅持單一實例。

任何想法?

+0

我找到了解決方案,可以幫助一些類似的問題。問題是我的兵馬俑版本是3.5.2,不支持石英2和以上。所以@PersistJobDataAfterExecution不起作用。所以我實現了棄用的StatefulJob接口,它的功能就像一個魅力! – NeoShine

回答

0

我找到了解決方案,可能會幫助有類似問題的解決方案。問題是我的兵馬俑版本是3.5.2,不支持石英2和以上。所以@PersistJobDataAfterExecution不起作用。所以我實現了棄用的StatefulJob接口,它的功能就像一個魅力!