【问题标题】:Same data read by PCF instances for spring batch applicationPCF 实例为 spring 批处理应用程序读取的相同数据
【发布时间】:2017-09-12 14:22:57
【问题描述】:

我正在开发一个 spring 批处理应用程序,它使用 JdbcCursorItemReader 从数据库读取数据,当我运行单个实例时,该应用程序按预期工作。

我在 PCF 中部署了这个应用程序并使用了自动缩放功能,但是多个实例正在从数据库中检索相同的记录。

如何防止从其他实例读取重复数据?

【问题讨论】:

  • 如果您运行相同的查询,您将获得相同的数据。你到底想做什么?
  • 我正在使用 status_nm 列从表中读取数据,其中值是新的,您能否建议我如何锁定这些记录以便其他实例无法选择它。我尝试选择更新查询但是在这种情况下,当我调用更新或删除时,我遇到了死锁。我知道是否通过 select for update 检索记录,它应该使用 current of 子句更新或删除,你能帮我如何使用 java 使用 current of sql .谢谢提前

标签: spring-batch


【解决方案1】:

这通常通过应用处理后的指标模式来处理。在此模式中,您在处理每条记录时用状态标记的每一行都有一个附加字段。然后,您可以使用查询仅过滤与您关心的状态匹配的记录。在这种情况下,状态可以是特定于节点的,以便节点只选择节点标记的记录。

【讨论】:

  • 如果我使用已处理的指标模式意味着记录已更新为某些指标,比如 in_process,假设我从 db 读取 500 条记录并且提交间隔为 100,那么在达到提交后,in_process 指标将在数据库中提交间隔。并且可能是第二个实例将再次从数据库中读取该数据,因为那时没有提交更新。
  • 进程指示器模式有两个部分。第一个是运行的实例标记它将通过侦听器处理的项目。然后,在处理它们时,指示符会更改以指示已成功处理。
  • 如果您可以为此分享一些代码示例,这将是很大的帮助。因为我无法获得任何示例..
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2018-04-22
  • 1970-01-01
相关资源
最近更新 更多