首页 > 解决方案 > 我怎样才能阻止我的整个工作从并行流中?

问题描述

我有一份有 2 个流程的工作

Flow parallelFlow = new FlowBuilder<SimpleFlow>("parallelFlow")
    .split(new SimpleAsyncTaskExecutor())
    .add(flow1, flow2)
    .build();

flow1 包含 step1,它stepExecution.setTerminateOnly()在 5 秒后停止使用该作业

public class Step1 implements Tasklet {

    @Override
    public RepeatStatus execute(@NotNull StepContribution stepContribution, @NotNull ChunkContext chunkContext) throws InterruptedException, NoSuchJobExecutionException, JobExecutionNotRunningException {
        Thread.sleep(5000);
        stepContribution.getStepExecution().setTerminateOnly();
        return RepeatStatus.FINISHED;
    }
}

flow2 包含 step2 只等待 10s 和 step3 有一些逻辑

@AllArgsConstructor
public class Step2 implements Tasklet {

    @Override
    public RepeatStatus execute(@NotNull StepContribution stepContribution,@NotNull ChunkContext chunkContext) throws InterruptedException {
        Thread.sleep(10000);
        return RepeatStatus.FINISHED;
    }
}

我试图停止这项工作,我希望这项工作已经停止,并且 step3 从未执行过。

在这种情况下,我的工作被停止了,但 step3 被执行了。

但是,如果我将流顺序更改为flow2, flow1它将像魅力一样起作用!

Flow parallelFlow = new FlowBuilder<SimpleFlow>("parallelFlow")
    .split(new SimpleAsyncTaskExecutor())
    .add(flow2, flow1)
    .build();

我无法理解我做错了什么

Java 版本 11,Spring 批处理版本 4.2.4.RELEASE

标签: springspring-batch

解决方案


推荐阅读