我正在尝试扩展一个相当简单的 Springbatch tasklet。情况如下:
- HibernatePagingItemReader
- 自定义处理器:根据来自 HibernatePagingItemReader 的数据执行 Web 服务查询
- 自定义作家
瓶颈是我的处理器,因为 web 服务查询很慢,而且很容易并行化。
我在我的 tasklet 上添加了一个任务执行器(org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor),但它并没有线性扩展:超过 5 个线程,总执行时间是相同的。
Spring 文档说读者不是现成的可扩展的,但我的需求要简单得多。读取器获取的每条记录都是独立的,因此我可以并行执行读取器。
我的问题是:
- 如何在多线程上下文中执行读取器?它们是并行化的,还是将数据分发给并行化的读者?
- 如果读者是并行的,我会认为我应该有更少量的记录(设置 maxItemCount)来将这些记录分发给处理器
还有其他想法可以扩大规模吗?