首页 > 解决方案 > Spring批处理:动态块大小

问题描述

我有步骤读取多个资源,我需要根据每个文件的行数更改块大小。spring batch 是否有可能具有动态块大小,还是有其他方法可以做到这一点?

标签: javaspringspring-batch

解决方案


你可以做Spring Batch Step Partitioning。对一个步骤进行分区,以便该步骤具有多个线程,每个线程都并行处理一大块数据。如果您有大量数据可以在逻辑上拆分为可以并行处理的较小块,这将非常有用。它的工作方式是,您将定义一个主步骤,负责确定块的基础,然后将所有这些块分配给一组从属步骤来处理每个块。

配置分区步骤时,您可以像定义任何其他步骤一样定义一个步骤,方法是给它一个 ID,如果需要,还可以给一个下一步值。Spring Batch没有将步骤的内容定义为普通tasklet,而是提供了一个分区标记,该标记要求您指定要分区的作业步骤以及将用于确定数据块的Partitioner 。您还需要定义将处理这些步骤的分区处理程序,在这种情况下,我们将使用一个ThreadPoolTask​​Executor,它的线程池大小为 10,如果它们不被使用,则允许它们超时。

<bean id="loadTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="10" />
    <property name="maxPoolSize" value="10" />
    <property name="allowCoreThreadTimeOut" value="true" />
</bean>

这里的模式信息:https ://keyholesoftware.com/2013/12/09/spring-batch-partitioning/


推荐阅读