目前,Spring Batch框架不支持暂停步骤的官方方法。
这对我来说是一个挑战,我希望了解如何配置这样的逻辑?
我有一个外部服务,它决定当前作业是否应该停止特定的步骤。在我的系统中有很多原因需要对运行作业的各个步骤进行这种细粒度的控制。
我最初的想法是如何配置暂停一个步骤是做两件事之一:
1.将使特定的步骤线程休眠,直到控制流向我的服务发出信号,再次开始运行该线程。
1.重新定义Step接口,并包含一个方法,允许我通过一些类属性(比如布尔值)暂停步骤。不幸的是,对于这种情况,我不确定我应该考虑重写哪些类。
当前Spring Batch提供的Flow类抽象不够好,因为这对作业来说是静态的,在我的情况下,我有另一个服务决定这一点,因此Flow是不够的。
最终的目标是JobRepository spring batch使用的是正确的状态设置,以及没有运行的实际步骤,我发现这是这样一个特性的棘手部分。重新开始我的步骤完全是另一种可能性,但我宁愿避免这种情况,因为它会导致浪费的工作,除非我重新开始的步骤后,最后的读取和写入计数,我也没有完全理解。
谢谢
1条答案
按热度按时间sgtfey8w1#
我有一个外部服务,它决定当前作业是否应该停止特定的步骤。
您可以使用
FlowBuilder#stopAndRestart(JobExecutionDecider decider)
在特定步骤停止流,并在稍后重新启动作业。自定义决策可以在JobExecutionDecider
中实现。您还可以使用
FlowBuilder#stopAndRestart(Step restart)
在特定步骤停止作业并在另一个步骤启动。