在Spring Batch

时间:2017-01-05 07:16:58

标签: java spring-batch

我已经实现了Spring批处理partitioning,我从Map<String, ExecutionContext> result = new HashMap<>();的partition()方法返回Partitioner

我的要求是按特定顺序启动从属步骤(插入订单到result地图),而上述Map不会发生这种情况。

我尝试使用Map<String, ExecutionContext> result = new LinkedHashMap<>();,这也没用 - 来自地图的任何线程都是随机启动的。

我在主步骤配置中使用SimpleAsyncTaskExecutor作为执行程序,并且concurrencyLimit并行线程已启动。如果我设置concurrencyLimit=1,那么我希望第一个线程插入result地图以开始使用,依此类推。

如何实施此排序?

1 个答案:

答案 0 :(得分:2)

从查看代码,以及上面的步骤,你可能需要覆盖StepExecutionSplitter#split,我相信你可以扩展SimpleStepExecutionSplitter类并实现Split方法,在split方法中你需要更改用于从HashSet收集StepExecution的set到LinkedHashSet,如果你想考虑重启,那么你可能还需要考虑改变getContexts方法。

以下是添加拆分器的代码段。

stepBuilders.get("partitionStep")
                .partitioner(slaveStep)
                .partitioner("myParitionerStep", partitioner)
                .taskExecutor(new SimpleThreadPoolTaskExecutor())
                .splitter(new SimpleStepExecutionSplitter(jobRepository, allowStartIfComplete, stepName, partitioner))
                .build()