我有一份工作,由不同的jobSteps组成。
我想一起触发一批这些JobSteps(JobStep1 | JobStep2 | JobStep3)(与AsyncTaskExecutor在不同线程中运行)
当其他作业步骤完成时,最后一个作业步骤(作业步骤4)。
因此,我为每个JobStep创建了不同的流程,并使用AsyncTaskExecutor将它们放在一个流程中。
我还为最后一个JobStep制作了一个流程。

JobStep1 | JobStep2 | JobStep3完成时
作业步骤4

下面的代码代表了我的实现:

 Flow flowJob1= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep1).end();

 Flow flowJob2= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep2).end();

Flow flowJob3= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep3).end();

Flow flowJob4= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep4).end();

 Flow splitFlow = new FlowBuilder<Flow>("splitflow").split(new SimpleAsyncTaskExecutor()).add(flowJob1,flowJob2,flowJob3).build();

然后对于创建作业,我使用以下功能:
JobFlowBuilder jobFlowBuilder = jobBuilderFactory.get(jobName).repository(jobRepository)
                .start((Flow)splitFlow);

            jobFlowBuilder.next(flowJob4);
        FlowJobBuilder flowJobBuilder= jobFlowBuilder.build();
        Job parentJob = flowJobBuilder.build();
        return parentJob;

问题是:
主Job不会等待所有JobSteps(在不同线程中)完成,然后再运行下一个JObStep。我应该做些 Spring 批处理配置来解决这个问题吗?

最佳答案

您需要将JobStep 1-3合并为一个FlowStep。然后,您将使用常规的SimpleJobBuilder构建您的工作。

Flow flowJob1= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep1).end();

Flow flowJob2= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep2).end();

Flow flowJob3= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep3).end();

// Don't need this
// Flow flowJob4= new FlowBuilder<Flow>(jobStep.getName()).from((JobStep)jobStep4).end();

Flow splitFlow = new FlowBuilder<Flow>("splitflow").split(new SimpleAsyncTaskExecutor()).add(flowJob1,flowJob2,flowJob3).build();

FlowStep flowStep = new FlowStep(splitFlow);

SimpleJobBuilder jobBuilder = new JobBuilder(yourJobName).start(flowStep);

jobBuilder.next(jobStep4);

关于java - Spring Batch FlowJobBuilder : Parallel and sequential execution of “jobStep” type Steps,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37192240/

10-10 16:13