2012-10-16 57 views
1

我想在跨触发器运行相同作业的持续重试计数数据。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中运行。坚持单一实例。

任何想法?

+0

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

回答

0

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