我有一步读取多个资源,我需要根据每个文件的行数更改块大小。春季批处理有可能具有动态的块大小,还是有其他方法可以做到?
答案 0 :(得分:0)
您可以进行 Spring Batch步骤分区。对一个步骤进行分区,以便该步骤具有多个线程,每个线程并行处理一块数据。如果您有大量的数据可以在逻辑上拆分为可以并行处理的较小的块,这将非常有帮助。这种工作方式是,您将定义一个主要步骤,该步骤负责确定块的基础,然后将所有这些块都植入到一组从属步骤中,以处理每个块。
在配置分区步骤时,您可以像定义任何其他步骤一样定义一个步骤,方法是为其指定一个ID,如果需要,还可以为其指定下一步值。 Spring Batch不是将步骤的内容定义为普通的 chunk 或 tasklet ,而是提供了一个分区标签,该标签要求您指定要分区的作业步骤和 Partitioner ,它将用于确定数据块。您还需要定义将要处理这些步骤的分区处理程序,在这种情况下,我们将使用 ThreadPoolTaskExecutor ,该线程处理程序的线程池大小为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/