我目前正在构建一个spring批处理应用程序,其中执行几个步骤。除了一个,所有的步骤都是简单的tasklet(没有读写器),它们负责复制文件,发送请求,启动批处理文件(* .bat)等各种任务。Spring批处理并行Tasklet(s)
大多数步骤应该是连续执行。在一个特定的步骤中,我想要启动X个可能最多有Y个实例的文件X *.bat
。
在一个例子中,让我们说我有10 *.bat
文件,但我想有最多5个并行运行。所以前5个一起开始,当这些完成时,下一个(第6个)应该开始,直到全部10个被处理。
当然,当所有10的执行完成时,下一步应该开始(所以它是一个同步执行)。
的问题:
- 是春天批量正确的路要走? (这是一个步骤,应执行10次不同的参数?)
- 或者我应该只执行一步并开发一个“线程控制器”,允许5(或Y)最大线程?
如果1 == true
:)我想我与taskExecutor的工作,下面我有一个例子,我在那里开始的第一步(可以说已经找到了X是多少),在那之后我有一个flowParallel(简单地说,如果有更多的批次,再次启动该步骤),然后我做了一个分裂以允许并行执行(目前只有3个步骤,当然,我可以添加所有X, “taskExecutor.setMaxPoolSize”,我觉得很蠢)
Flow flowInit = new FlowBuilder<Flow>("flowInit")
.from(stepS1)
.end();
Flow flowParallel = new FlowBuilder<Flow>("flowParallel")
.start(stepS1Parallel)
.next(deciderOne)
.on("thereAreMoreBatchesToExecute")
.to(stepS1Parallel).end();
final Flow splitFlow = new FlowBuilder<Flow>("splitFlow")
.start(flowParallel)
.split(new SimpleAsyncTaskExecutor())
.add(flowParallel, flowParallel, flowParallel)
.build();
return jobs.get("dataLoadParallel")
.start(flowInit)
.next(splitFlow)
.next(stepS1)
.end().build();
那么,我做错了什么?我该走哪条路?