gpt4 book ai didi

java - 在 terracotta jobstore 中运行时,Quartz JobExecutionContext 不会持续存在

转载 作者:行者123 更新时间:2023-12-01 05:04:33 26 4
gpt4 key购买 nike

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

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

注意:当我正常运行它而不是在赤土陶器中运行时,它确实有效,在 Job 类上使用 @PersistJobDataAfterExecution

这是一个伪代码:

Cron 触发器 1:在 CronTrigger.executionComplete() 上 > 如果失败 > 增加 retryCount 并将其设置在作业上下文 JobDataMap 中 > 使用新的 SimpleTrigger 重新安排同一作业(上下文0中的重试计数,新值设置1)

简单触发器 1:在 SimpleTrigger.executionComplete() 上 > 如果失败 > 增加 retryCount 并将其设置在作业上下文 JobDataMap 中 > 使用新的 SimpleTrigger 重新安排同一作业(上下文 1 中的重试计数,新值集 2)

简单触发器2:在 SimpleTrigger.executionComplete() 上 > 如果失败 > 增加 retryCount 并将其设置在作业上下文 JobDataMap 中 > 使用新的 SimpleTrigger 重新安排同一作业

(上下文中的重试计数仍为 1,新值设置为 2)

这就是问题所在,重试计数在第一次设置后不会增加。同样,只有在 terracotta jobstore 中运行时才会发生这种情况。在单个实例中完美坚持。

有什么想法吗?

最佳答案

我找到了可能对遇到类似问题的人有所帮助的解决方案。问题是我的 terracotta 版本是 3.5.2,不支持quartz 2 及以上版本。所以 @PersistJobDataAfterExecution 不起作用。因此,我实现了已弃用的 StatefulJob 接口(interface),它的工作方式非常神奇!

关于java - 在 terracotta jobstore 中运行时,Quartz JobExecutionContext 不会持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12907143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com