首页 文章

Spring Batch多线程与分区

提问于
浏览
0

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

我有一个在交易日期栏上划分的表格 . 我想通过使用Spring批处理框架的读者,处理器和编写器来处理该表的记录 . 我想要做的是根据交易日期创建单独的线程进行读取,写入和处理 . 假设有4个交易日期,那么我想创建4个单独的线程,每个线程用于单独的交易日期 . 在每个线程中,读者将从表中读取该交易日期的记录,丰富处理器中的记录,然后在编写器中发布/写入 .

我是Spring批处理的新手,所以我需要通过使用Spring批处理多线程或分区来帮助设计正确的方法 .

2 回答

  • 0

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

    <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接口创建splitPartitioner . 然后在分区方法中,根据需要拆分源数据,并且您创建的每个ExecutionContext都将由它自己的线程执行 .

  • 0

    您可以使用 local partitioningmaster-slave 方法来解决您的问题 . 在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>
    

    有关更多详细信息,请参阅here讨论的简单示例 .

相关问题