春季批:动态块大小

时间:2019-04-10 10:55:34

标签: java spring spring-batch

我有一步读取多个资源,我需要根据每个文件的行数更改块大小。春季批处理有可能具有动态的块大小,还是有其他方法可以做到?

1 个答案:

答案 0 :(得分:0)

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

在配置分区步骤时,您可以像定义任何其他步骤一样定义一个步骤,方法是为其指定一个ID,如果需要,还可以为其指定下一步值。 Spring Batch不是将步骤的内容定义为普通的 chunk 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/