在terracotta jobstore中运行时,Quartz JobExecutionContext不会持久存在

时间:2012-10-16 03:31:08

标签: java quartz-scheduler terracotta

我想在运行相同作业的触发器之间保留重试计数数据。

我尝试将其存储到JobExectionContext.JobDetails.JobDataMap中,这是一个DirtyHashMap。它被存储但是当第二次相同的作业由不同的触发器运行时,如果触发更新相同键的值则不会持续存在。因此,当您访问它时,第三次键值仍然与第一次相同。

注意:当我在Job类上使用@PersistJobDataAfterExecution正常运行而不是在兵马俑中时它会起作用

这是一个伪代码:

Cron Trigger 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)

这就是问题所在,重试次数在第一次设置后没有递增。再次,只有在赤土陶器作业中运行才会发生这种情况。坚持单一实例。

任何想法?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,可能会帮助一些有类似问题的人。问题是我的兵马俑版本是3.5.2,它不支持石英2及以上。所以@PersistJobDataAfterExecution没有用。所以我实现了弃用的StatefulJob接口,它就像一个魅力!