我正在尝试扩展一个相当简单的 Springbatch tasklet。 情况如下:
- HibernatePagingItemReader
- 自定义处理器:根据 HibernatePagingItemReader 中的数据执行 Web 服务查询
- 自定义作家
瓶颈是我的处理器,因为 Webservice 查询很慢,而且可以轻松并行化。
我在我的tasklet上添加了一个任务执行器(org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor),但它不能线性扩展:超过5个线程,总执行时间是相同的。
Spring 文档说阅读器不是现成的可扩展的,但我的需求要简单得多。 读取器获取的每条记录都是独立的,因此我可以并行执行读取器。
我的问题是:
- 如何在多线程上下文中执行读取器?它们是并行的,还是将数据分发给并行的读取器?
- 如果读者并行化,我认为我应该有更少量的记录(设置 maxItemCount)来将这些记录分发给处理器
还有其他想法可以扩大规模吗?
最佳答案
通常,任何类型的批处理库都会定义用于执行并行工作的线程池的上限。 从你的描述来看,你已经达到了上限。尝试增加它。
关于java - 如何扩展 Hibernate Reader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12725301/