我想在运行相同作业的触发器之间保留重试计数数据。
我尝试将其存储到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)
这就是问题所在,重试次数在第一次设置后没有递增。再次,只有在赤土陶器作业中运行才会发生这种情况。坚持单一实例。
任何想法?
答案 0 :(得分:0)
我找到了解决方案,可能会帮助一些有类似问题的人。问题是我的兵马俑版本是3.5.2,它不支持石英2及以上。所以@PersistJobDataAfterExecution没有用。所以我实现了弃用的StatefulJob接口,它就像一个魅力!