当前位置: 首页 > 知识库问答 >
问题:

Quartz JobExecution在兵马俑作业存储中运行时不保留上下文

袁翰池
2023-03-14

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

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

注意:当我在作业类上使用@PersistJobDataAfterExecution正常运行它而不是在terracotta中运行时,它确实工作

下面是一个伪代码:

Cron触发器1:在CronTrigger.executionComplete()上

简单触发器 1:On SimpleTrigger.executionComplete()

简单触发器2:On simple Trigger . execution complete()

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

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

任何想法?

共有1个答案

罗祺
2023-03-14

我已经找到了可能对类似问题有所帮助的解决方案。问题是我的兵马俑版本是3.5.2,不支持石英2及更高版本。所以@PeristJobDataAfterExecution不起作用。所以我实现了已弃用的StatefulWork界面,它工作起来很有魅力!

 类似资料:
  • 我在我的应用程序中使用了maven、hibernate3、struts和spring,并成功地使用了ehcache。缓存是在本地完成的,现在我想要分布式。我找不到一个很好的教程,它一步一步地解释了如何使用ehcache和terracotta进行分发。 帮助将不胜感激。 谢啦

  • 我在系统中运行了2/3个Java/Spring引导应用程序。我想使用通用存储,以便其他Java应用程序也可以使用任何其他Java /Spring启动应用程序生成的缓存。 我可以使用公共磁盘库在内存中创建ecache吗? 或者我应该在我的机器上运行独立的ehcache 所以,据我所知,看起来如果我们需要在服务器中运行,它应该在Terracotta服务器中。 但是,我更希望集中缓存,以便其他应用程序可

  • 我正在尝试将我的应用程序连接到 Terracotta 缓存群集,但我在使用我设置的配置启动应用程序时遇到问题。我在控制台中没有收到任何错误,但是如果我进行调试,则在尝试创建缓存管理器时会失败。 我得到的错误是这个。原因: java.lang.ClassNotfundException: net.sf.ehcache.config.TerracottaConfig配置 我正在使用冬眠4.x,Spri

  • 我在Openshift环境中运行SCDF。我正在安排一个Spring批处理作业每5分钟运行一次。有时作业可能运行超过5分钟。在这种情况下,是否可以保留下一个计划的作业执行,直到上一个完成其执行? 我们不想改变作业执行的频率和间隔。 谢了。

  • 使用Spring boot Web客户机从REST API请求JSON,服务器的响应体存储在一个简单的中。对服务器的请求包含一个ID,但它不包括在响应中,而是解释响应所需的。

  • 我正在尝试将一个xml文件保存到Android的内部存储中。但是,该文件没有得到保留。每次我重新启动模拟器时,该文件都会是空的。只有当我在应用程序中手动选择向其写入内容时,该文件才会被写入内容。然后,如果我关闭应用程序或其他什么,文件内容会被保留。但是,当我关闭模拟器时,文件会在那里,但是空的。 因此,我不确定我是否正确地保存了它。 请看看我的代码,也许它有问题,或者它与我的Android模拟器的