我有一个场景,我需要在两个步骤中引入并行,第二个应该从第一个生成多个线程,其中也包含多个线程 .

历史档案或活动记录的暂停记录就是这种情况 - 每个活动的出租车都会暂停 .

目前通过如下步骤循环使用决策器来实现相同的目的

<batch:job id="agreementDataArchiveJob">
        <batch:step id="getActiveRecordStep">
            <batch:tasklet ref="getActiveRecordsTask"
                task-executor="taskExecutor" />
            <batch:next on="CONTINUE" to="getSuspendedRecordsStep"></batch:next>
            <batch:end on="COMPLETED" />
        </batch:step>
        <batch:step id="getSuspendedRecordsStep">
            <batch:tasklet ref="getSuspendedRecordsToArchiveTask"
                task-executor="taskExecutor" />
            <batch:next on="CONTINUE" to="archiveSuspendedDataStep"></batch:next>
            <batch:next on="COMPLETED" to="archivalStepDecider"/>
        </batch:step>
        <batch:step id="archiveSuspendedDataStep" next="archivalStepDecider">
            <batch:partition partitioner="archiveSuspendedDataPartitioner"
                handler="suspendedAgreementArchivalPartitionHandler" step="suspendedAgreementArchival">
            </batch:partition>
        </batch:step>
        <batch:decision decider="archivalStepExecutionDecider"
            id="archivalStepDecider">
            <batch:next on="CONTINUE" to="getSuspendedRecordsStep"></batch:next>
            <batch:end on="COMPLETED"></batch:end>
        </batch:decision>
        <batch:listeners>
            <batch:listener ref="archivalBatchListener"></batch:listener>
        </batch:listeners>
    </batch:job>

这里有一个活动,它的被挂起将被清除多个线程 - 继续下一个活动 . 为了优化性能,需要以这样一种方式实现并行,即同时处理多个活动记录 - 每个活动的id线程调用多个并行线程来删除其历史记录

<batch:job id="multilevelDataArchiveJob">
        <batch:step id="getActiveRecordStep">
            <batch:tasklet ref="getActiveRecordsTask"
                task-executor="taskExecutor" />
            <batch:next on="CONTINUE" to="getActiveIdsForConcurrentExecution"></batch:next>
            <batch:end on="COMPLETED"/> 
        </batch:step>
        <batch:step id="getActiveIdsForConcurrentExecution" next="processSuspendedIds">
            <batch:partition step="getSuspendedForActiveRecordStep" 
                partitioner="readActiveDataPartitioner" handler="activeRecordPartitionHandler" />
        </batch:step>
        <batch:step id="processSuspendedIds" parent="getActiveIdsForConcurrentExecution">
            <batch:partition partitioner="archiveSuspendedDataPartitioner"
                handler="suspendedDataArchivalPartitionHandler" step="suspendedDataArchival" />
        </batch:step>
</batch:job>

但是,即使为处理活动记录创建了多个分区,这也仅针对一个活动执行第二个块步骤

我们如何更改配置以实现多级并行?我们需要改变方法吗?