我想跨运行相同作业的触发器保留重试计数数据。
我尝试将它存储到 JobExectionContext.JobDetails.JobDataMap,这是一个 DirtyHashMap。它会被存储,但是当第二次相同的作业由不同的触发器运行时,如果该触发器更新相同键的值,它不会持续存在。因此,当您第三次访问它时,键值仍然与第一个相同。
注意:当我在 Job 类上使用 @PersistJobDataAfterExecution 正常运行而不是在兵马俑中运行时,它确实有效
这是一个伪代码:
Cron 触发器 1:在 CronTrigger.executionComplete() > 如果失败 > 增加 retryCount 并在 jobcontext JobDataMap 中设置它 > 使用新的 SimpleTrigger 重新安排相同的作业(在上下文 0 中重试计数,新值设置为 1)
简单触发器 1:在 SimpleTrigger.executionComplete() 上 > 如果失败 > 增加 retryCount 并在 jobcontext JobDataMap 中设置它 > 使用新的 SimpleTrigger 重新安排相同的作业(上下文 1 中的重试计数,新值集 2)
简单触发器 2:在 SimpleTrigger.executionComplete() > 如果失败 > 增加 retryCount 并在作业上下文 JobDataMap 中设置它 > 使用新的 SimpleTrigger 重新安排相同的作业
(上下文中的重试次数仍为 1,新值设置为 2)
这就是问题所在,重试计数在第一次设置后没有增加。同样,只有在 terracotta jobstore 中运行时才会发生这种情况。在单个实例中完美地坚持。
任何想法?