我有一份由不同的工作组成的工作。我希望在其他作业步骤完成后,一起触发一批这些作业步骤(JobStep1、JobStep2、JobStep3)(在不同的线程中与AsyncTaskExecutor一起运行)和最后一个作业步骤(JobStep4)。因此,我为每个JobStep创建了不同的流,并用AsyncTaskExecutor将它们放在一个流中。我还为最后一个JobStep做了一个单独的流。
完成工作时的工作步骤1工作步骤2工作步骤3工作步骤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;
问题是:主作业没有等待所有作业步骤(在不同的线程中)完成,然后运行下一个作业步骤。有没有我应该做的spring batch配置来解决这个问题?
您需要将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);
这是我的Spring Batch管理控制台显示的内容的副本: 步名..读..写..提交..回滚..持续时间..状态 step2................................................................................ 谢谢
我扩展了FlowJob类,并将其设置为: 如你所见,我想做的如下: 执行步骤1 当我运行作业时,步骤1和2正确执行,然后作业终止。 知道吗? 编辑:SO Spring批处理流程/步骤后拆分的相关问题。
问题内容: 我整天都在整理此问题,希望有人能帮助您确定我的问题。我已经使用Ajax在我的应用程序中创建了“异步进度回调”类型的功能。当我将功能剥离到测试应用程序中时,我得到了预期的结果。见下图: 所需功能 当我使用相同的代码将功能绑定到我的单页应用程序中时,出现了一种阻塞问题,其中所有请求仅在最后一个任务完成后才得到响应。在测试应用程序中,所有请求均会依次响应。服务器报告所有请求的状态(“待定”)
问题内容: 在我的模型中,具有获取数据的功能,该数据需要完成处理程序作为参数: 它正在调用另一个函数,该函数执行联系人的异步加载,我将完成情况转发到该函数 具有完成的调用如下所示: 有时这是可行的,但是执行的顺序常常不是我期望的那样。问题是,有时下的范围之前执行下结束了。 这是为什么?如何确保在之后开始执行? 问题答案: 一些观察: 它总是执行2之前1处的值。获得描述的行为的唯一方法是,如果要在f
本文向大家介绍setTimeout和Promise的执行顺序?相关面试题,主要包含被问及setTimeout和Promise的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先我们来看这样一道题: 输出答案为2 10 3 5 4 1 要先弄清楚settimeout(fun,0)何时执行,promise何时执行,then何时执行 settimeout这种异步操作的回调,只有主线程