1

我想用 4 个步骤配置一个 Spring Batch 作业。Step-2 和 Step-3 相互独立。所以我想并行执行。根据执行参数,这两个步骤中的任何一个或两者都可以跳过。检查流程如下所述: 批处理流程详细信息

Java配置如下所述:

@Bean
public Job sampleBatchJob()
    throws Exception {

final Flow step1Flow = new FlowBuilder<SimpleFlow>("step1Flow")
        .from(step1Tasklet()).end();

final Flow step2Flow = new FlowBuilder<SimpleFlow>("step2Flow")
        .from(new step2FlowDecider()).on("EXECUTE").to(step2MasterStep())
        .from(new step2FlowDecider()).on("SKIP").end(ExitStatus.COMPLETED.getExitCode())
        .build();
final Flow step3Flow = new FlowBuilder<SimpleFlow>("step3Flow")
        .from(new step3FlowDecider()).on("EXECUTE").to(step3MasterStep())
        .from(new step3FlowDecider()).on("SKIP").end(ExitStatus.COMPLETED.getExitCode())
        .build();

final Flow splitFlow = new FlowBuilder<Flow>("splitFlow")
        .split(new SimpleAsyncTaskExecutor())
        .add(step2Flow, step3Flow)
        .build();

return jobBuilderFactory().get("sampleBatchJob")
        .start(step1Flow)
        .next(splitFlow)
        .next(step4MasterStep())
        .end()
        .build();
}

Step2FlowDecider 的示例代码:

public class Step2FlowDecider
    implements JobExecutionDecider {
@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {

    if (StringUtils.equals("Y", batchParameter.executeStep2())) {
        return new FlowExecutionStatus("EXECUTE");
    }
    return new FlowExecutionStatus("SKIP");
}

}

使用此配置,当我尝试执行批处理时,它会失败,没有任何详细信息错误日志。

4

0 回答 0