Spring batch Spring批处理多线程与分区

Spring batch Spring批处理多线程与分区,spring-batch,Spring Batch,我有一个需求,我想在下面的场景中使用Spring批处理框架 我有一个表,它是按交易日期列划分的。 我想使用SpringBatch框架的读卡器、处理器和写入器来处理这个表的记录。 我想做的是根据交易日期创建单独的线程用于读取、写入和处理。假设有4个交易日期,那么我想为每个交易日期创建4个独立的线程。在每个线程中,阅读器将从该交易日期的表中读取记录,在processor中充实记录,然后在writer中发布/写入 我是Spring batch的新手,因此我需要帮助通过使用Spring batch多线程

我有一个需求,我想在下面的场景中使用Spring批处理框架

我有一个表,它是按交易日期列划分的。 我想使用SpringBatch框架的读卡器、处理器和写入器来处理这个表的记录。 我想做的是根据交易日期创建单独的线程用于读取、写入和处理。假设有4个交易日期,那么我想为每个交易日期创建4个独立的线程。在每个线程中,阅读器将从该交易日期的表中读取记录,在processor中充实记录,然后在writer中发布/写入


我是Spring batch的新手,因此我需要帮助通过使用Spring batch多线程或分区来设计正确的方法。

也许您可以使用如下本地分区:

<batch:job id="MyBatch" xmlns="http://www.springframework.org/schema/batch">
    <batch:step id="masterStep">
        <batch:partition step="slave" partitioner="splitPartitioner">
            <batch:handler grid-size="4" task-executor="taskExecutor"  />
        </batch:partition>
    </batch:step>
</batch:job>
然后使用org.springframework.batch.core.partition.support.Partitioner接口创建拆分器。然后,在分区方法中,根据需要分割源数据,创建的每个ExecutionContext都将由它自己的线程执行。

您可以使用本地分区或主从方法来解决问题。在Spring配置中编写主和从步骤,如下所示

<batch:job id="tradeProcessor">
    <batch:step id="master">
        <partition step="slave" partitioner="tradePartitioner">
            <handler grid-size="4" task-executor="taskExecutor" />
        </partition>
    </batch:step>       
</batch:job>
<batch:step id="slave">
    <batch:tasklet>
        <batch:chunk reader="dataReader" writer="dataWriter"
                          processor="dataProcessor" commit-interval="10">
        </batch:chunk>
    </batch:tasklet>
</batch:step>
有关更多详细信息,您可以参考讨论的简单示例