1

我正在尝试扩展一个相当简单的 Springbatch tasklet。情况如下:

  • HibernatePagingItemReader
  • 自定义处理器:根据来自 HibernatePagingItemReader 的数据执行 Web 服务查询
  • 自定义作家

瓶颈是我的处理器,因为 web 服务查询很慢,而且很容易并行化。

我在我的 tasklet 上添加了一个任务执行器(org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor),但它并没有线性扩展:超过 5 个线程,总执行时间是相同的。

Spring 文档说读者不是现成的可扩展的,但我的需求要简单得多。读取器获取的每条记录都是独立的,因此我可以并行执行读取器。

我的问题是:

  • 如何在多线程上下文中执行读取器?它们是并行化的,还是将数据分发给并行化的读者?
  • 如果读者是并行的,我会认为我应该有更少量的记录(设置 maxItemCount)来将这些记录分发给处理器

还有其他想法可以扩大规模吗?

4

1 回答 1

0

通常,任何类型的批处理库都会定义用于执行并行工作的线程池的上限。从你的描述看,好像你达到了上限。尝试增加它。

于 2012-10-04T11:56:29.843 回答