我想在跨触发器运行相同作业的持续重试计数数据。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中运行。坚持单一实例。
任何想法?
我找到了解决方案,可以帮助一些类似的问题。问题是我的兵马俑版本是3.5.2,不支持石英2和以上。所以@PersistJobDataAfterExecution不起作用。所以我实现了弃用的StatefulJob接口,它的功能就像一个魅力! – NeoShine