Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
如何控制spring批处理中的重复和下一步执行_Spring_Spring Batch - Fatal编程技术网

如何控制spring批处理中的重复和下一步执行

如何控制spring批处理中的重复和下一步执行,spring,spring-batch,Spring,Spring Batch,嗨,我有下面类似xml的执行作业 <batch:job id="Job1" restartable="false" xmlns="http://www.springframework.org/schema/batch"> <step id="step1" next="step2"> <tasklet ref="automate" /> </step> <step id="

嗨,我有下面类似xml的执行作业

<batch:job id="Job1" restartable="false" xmlns="http://www.springframework.org/schema/batch"> <step id="step1" next="step2"> <tasklet ref="automate" /> </step> <step id="step2"> <tasklet ref="drive" /> <next on="COMPLETED" to="step3"></next> </step> <step id="step3"> <tasklet ref="generate_file" /> </step> </batch:job>
为此,我编写了一个tasklet来执行脚本。现在我想知道,若脚本执行失败了三次,那个么下一步将不会执行。但从Tasklet中,我只能返回已完成的,将流程移动到下一步的,以及继续流程的,可继续的。我应该怎么做。

这可以通过在该步骤中指定自定义“区块完成策略”并计算失败次数来实现。查看“”和自定义区块完成策略的示例。希望这有帮助

编辑:您可以将失败次数放入步骤执行上下文中,如步骤逻辑中,然后在完成策略类中检索失败次数:
stepExecution.getJobExecution().getExecutionContext().put(“错误计数”,nooferror)

你可以写下自己的决定,决定是下一步还是结束工作。 如果您能够处理故障,那么您也可以处理作业流

<decision id="validationDecision" decider="validationDecider">
        <next on="FAILED" to="abcStep" />
        <next on="COMPLETE" to="xyzstep" />
    </decision>

检查关于查看
SystemCommandTasklet
。它提供了执行脚本的工具以及处理返回的错误的方法。
<bean id="validationDecider" class="com.xyz.StepFlowController" />
public class StepFlowController implements JobExecutionDecider{

@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
    FlowExecutionStatus status = null;
    try {
        if (failure) {
status = new FlowExecutionStatus("FAILED");

        }else {
            status = new FlowExecutionStatus("COMPLETE");
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return status;
}