Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理-执行一步后退或重新执行以前执行的步骤_Java_Spring_Spring Batch - Fatal编程技术网

Java Spring批处理-执行一步后退或重新执行以前执行的步骤

Java Spring批处理-执行一步后退或重新执行以前执行的步骤,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个spring批处理作业,比如说5个步骤(step1-->step2-->step3-->step4-->step5)。我已经配置了一个StepExecutionListener,它监听2个事件 beforstep()和afterStep()用于所有步骤 我的问题是,如果我当前使用的是beforeStep()方法,并且要执行的步骤是step2,我可以让spring批处理再次执行step1?执行step1后,流程应继续执行step2、step3等 为了再次澄清,我可以告诉spring bat

我有一个spring批处理作业,比如说5个步骤(
step1-->step2-->step3-->step4-->step5
)。我已经配置了一个
StepExecutionListener
,它监听2个事件

beforstep()
afterStep()
用于所有步骤

我的问题是,如果我当前使用的是
beforeStep()
方法,并且要执行的步骤是
step2
,我可以让spring批处理再次执行
step1
?执行
step1
后,流程应继续执行
step2
step3


为了再次澄清,我可以告诉spring batch再次从先前执行的步骤“开始执行”吗?

您可以使用以下方法实现步骤的特定顺序

<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>

(...)
下一个参数将定义下一个要执行的。 然而,我不确定你是否能在同样的执行中后退一步。但是Spring允许您在使用

完成后允许启动

这是真的

另外,对于构建工作流,请参见


希望这能有所帮助。

虽然我可能不会推荐这种行为,但是的,它应该能够实现。您需要做的是将step2配置为使用正确的退出代码转换到step1,step1需要能够重新运行

配置

<step id="step1" next="step2">
    <tasklet ref="someTasklet" allow-start-if-complete="true"/>
</step>
<step id="step2">
    <tasklet ref="someOtherTasklet"/>
    <listeners>
        <listener ref="loopingListener"/>
    </listeners>
    <next on="BACK" to="step1"/>
</step>
public class LoopingListener extends StepExecutionListenerSupport {

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        if(shouldLoop) {
            return new ExitStatus("BACK");
        } else {
            return stepExecution.getExitStatus();
        }
    }
}

谢谢你的回答。。我想要实现的是在当前作业执行过程中后退一步。。。使用Spring批处理API有可能吗?根据我的经验,我看到的唯一选择是使用条件流,如。我想我明白你的意思了。我也要试试。。谢谢你。谢谢你@Michael Minella的回答。看起来是个好办法。让我试试这个…@Michael Minella,如果我们有可重启的步骤,如何实现同样的效果