java - Spring批处理:动态块大小
问题描述
我有步骤读取多个资源,我需要根据每个文件的行数更改块大小。spring batch 是否有可能具有动态块大小,还是有其他方法可以做到这一点?
解决方案
你可以做Spring Batch Step Partitioning。对一个步骤进行分区,以便该步骤具有多个线程,每个线程都并行处理一大块数据。如果您有大量数据可以在逻辑上拆分为可以并行处理的较小块,这将非常有用。它的工作方式是,您将定义一个主步骤,负责确定块的基础,然后将所有这些块分配给一组从属步骤来处理每个块。
配置分区步骤时,您可以像定义任何其他步骤一样定义一个步骤,方法是给它一个 ID,如果需要,还可以给一个下一步值。Spring Batch没有将步骤的内容定义为普通块或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/
推荐阅读
- swift - Cannot Query Feature Attributes from ArcGIS Online Feature Service
- java - 获取 R/Java (MOA) 聚类算法结果并使用 python 处理它们的更好方法
- java - IntelliJ 正则表达式,用于跨文件查找和替换,不会用反向引用替换多个单词匹配
- java - 如何在 Fragment 上初始化 Google AdMob 横幅
- c# - 提高 API 中 XML 序列化程序的性能
- android - Android 10 / API 29:如何将手机连接到配置的网络?
- python - 如何更正python pandas中行中未对齐的行值
- android - Google Play 内部测试轨道上应用的未知用户
- python - 完成后如何自动退出PyQT QThread?
- shopify - 如何使用php将参数传递给shopify下的脚本文件?