spring - 我怎样才能阻止我的整个工作从并行流中?
问题描述
我有一份有 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
解决方案
推荐阅读
- spring - 在 Spring Data MongoDB 中使用聚合进行更新
- html - 根据您使用的操作系统应用不同的样式表
- c - 在 for 循环中使用哪个更有效,我
谁能帮我找出以下两个中哪一个更有效和正确?
1.
for(int i = num; i * i <= n; i++)
2.
int root = sqrt(n); for(int i = num; i <= root; i++)
- c# - C# 和 Catia - 想要存储来自不同目录的 .exe 和 dll
- bash - $PATH 和 .bash_profile 的问题
- python - 将行转换为数组
- c++ - 这是带有 std::any 或 std::is_copy_constructible 的 libstdc++ 中的错误,还是合法错误?
- java - 尝试进行视频通话时出现以下错误。还添加了调试日志
- stanford-nlp - 如何使用/安装 StanfordCoreNLP 的语言模型?(英语-完整,英语-kbp)
- jenkins - 从 Jenkinsfile 中的共享库导入类