分区程序重启问题

时间:2015-10-14 09:11:20

标签: spring-batch

以下是我在Spring Batch工作中尝试实现的目标:

  • 分区程序启动FlowStep
  • FlowStep由n个步骤
  • 组成
  • 如果失败,我希望一致地重启内部步骤

重启期间遇到以下问题: 假设我有2个分区,为了简单起见,我有一个syncTaskExecutor。第一个分区(partition0)运行良好,我们现在运行第二个分区(partition1)。

第一个问题是FlowStep的子步骤被检测为重复。这是因为子步骤的名称不以分区索引为后缀。但这些步骤最终会进行。

如果一个子步骤失败,则会发生这种情况。在这种情况下,在重启期间,由于partition0执行的所有子步骤都成功退出,所以partition1的剩余步骤不会被执行。

这里的主要问题是分区器的子步骤没有被索引,因此被检测为等价但不是。

此外,我不想将子步骤设置为可重新启动,因为我只想执行缺少的步骤而不是所有步骤。

此刻我错过了什么吗?你有什么选择我想做什么?

我知道我也可以从分区器(使用JobStep)启动一个真正的工作,但这不如FlowStep强大,因为我们真的受限于我们可以提供给作业的参数(没有现有的ExecutionContext)。我猜这里的人有同样的问题( Spring batch Partitioning with multiple steps in parallel?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在挖掘Spring Batch arcanes之后,我想我可以回答我自己的问题,也许可以帮助其他人。

此处的关键是提供我们自己的StepHandler,而不是默认的SimpleStepHandler。在此处理程序中,我们可以使用提供的ExecutionContext来查看将包含当前分区ID的预定义键。我们只需要使用此ID以step.getName() + ":" + id形式构建唯一的步骤名称。

为了插入此自定义StepHandler,我们会覆盖默认的FlowStep实施。

可在此处找到完整的示例https://github.com/miremond/spring-boot-sample-batch

相关问题