如何实现自定义控制器,让我能够停止 Spring Batch 中的某个步骤

问题描述 投票:0回答:1

目前 Spring Batch 框架不支持官方方法来暂停步骤。

这对我来说是一个挑战,我希望深入了解如何配置这样的逻辑?

我有一个外部服务来决定当前作业是否应该停止特定步骤。我的系统中有很多原因需要对正在运行的作业的各个步骤进行如此细粒度的控制。

我对如何配置步骤暂停的最初想法是执行以下两件事之一:

  1. 将休眠特定步骤线程,直到控制流向我的服务发出信号以再次开始运行该线程。
  2. 重写步骤接口并包含一个允许我通过某些类属性(例如布尔值)暂停步骤的方法。可悲的是,对于这种情况,我不确定应该考虑覆盖哪些类。

当前 Flow 类抽象 Spring Batch 提供的还不够好,因为这对于工作来说是静态的,在我的例子中,我有另一个服务来决定这一点,因此 Flow 是不够的。

最终目标是使用的 JobRepository spring 批处理具有正确的状态设置以及未运行的实际步骤,我发现这是此类功能的棘手部分。完全重新开始我的步骤是另一种可能性,但我宁愿避免这种情况,因为这会导致工作浪费,除非我在最后一次读写计数之后重新开始步骤,而我也没有完全理解这一点。

谢谢你。

java spring spring-batch
1个回答
0
投票

我有一个外部服务来决定当前作业是否应该停止特定步骤。

您可以使用

FlowBuilder#stopAndRestart(JobExecutionDecider decider)
在特定步骤停止流程并稍后重新启动作业。自定义决策可以在
JobExecutionDecider
中实施。

您还可以使用

FlowBuilder#stopAndRestart(Step restart)
在特定步骤停止作业并开始另一个步骤。

© www.soinside.com 2019 - 2024. All rights reserved.