[英]Order partitioned steps in Spring Batch
我已经实现了Spring批处理分区,并且正在返回Map<String, ExecutionContext> result = new HashMap<>();
从Partitioner
partition()方法开始。
我的要求是以特定顺序(从插入顺序到result
图)开始从属步骤,而上述Map
不会发生这种情况。
我试图使用Map<String, ExecutionContext> result = new LinkedHashMap<>();
这也没有用-地图中的任何线程都是随机启动的。
我在主步骤配置中使用SimpleAsyncTaskExecutor
作为执行程序,并且concurrencyLimit
并行线程开始使用。 如果我设置concurrencyLimit=1
,那么我要插入第一个线程以开始result
映射,依此类推。
如何执行此订购?
从查看代码开始,随着上述步骤的进行,您可能需要覆盖StepExecutionSplitter#split,我相信您可以扩展SimpleStepExecutionSplitter类并实现Split方法,在split方法中,您需要将用于收集StepExecution的集合从HashSet更改为LinkedHashSet。同时考虑重新启动,那么您可能还需要考虑在getContexts方法中进行更改。
以下是添加拆分器的代码段。
stepBuilders.get("partitionStep")
.partitioner(slaveStep)
.partitioner("myParitionerStep", partitioner)
.taskExecutor(new SimpleThreadPoolTaskExecutor())
.splitter(new SimpleStepExecutionSplitter(jobRepository, allowStartIfComplete, stepName, partitioner))
.build()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.