通过Partitioner动态设置ItemProcessor

时间:2015-10-15 16:28:37

标签: spring-batch

我想在几个线程中运行步骤,但我也想让每个线程使用不同的处理器,例如,我们可以让读者从不同的源读取。

这是我的xml配置:

    <batch:job id="job">
        <batch:step id="readFromQueuesMaster">
            <batch:partition step="readFromQueuesSlave" partitioner="queuePartitioner">
                <batch:handler grid-size="5" task-executor="taskExecutor"/>
            </batch:partition>
        </batch:step>
    </batch:job>

    <batch:step id="readFromQueuesSlave">
        <batch:tasklet>
            <batch:chunk reader="queueReader"
                         processor="#{stepExecutionContext[itemProcessor]}"
                         writer="flatFileItemWriter"
                         commit-interval="10"/>
        </batch:tasklet>
    </batch:step>

这是我的分区:

@Override
public Map<String, ExecutionContext> partition(int gridSize) {
    Map<String, ExecutionContext> result = new HashMap<>();
    for (int i = 1; i <= gridSize; i++) {
        ExecutionContext value = new ExecutionContext();
        value.put("itemProcessor", someMethodReturningProcessor(i));
        result.put("partition" + i, value);
    }
    return result;
}

显然,使用processor =&#34;#{stepExecutionContext [itemProcessor]}&#34;没有用。

0 个答案:

没有答案