java - 如何扩展 Hibernate Reader?

标签 java multithreading spring-batch

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

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

瓶颈是我的处理器,因为 Webservice 查询很慢,而且可以轻松并行化。

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

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

我的问题是:

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

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

最佳答案

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

关于java - 如何扩展 Hibernate Reader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12725301/

相关文章:

java - 多个作业中的 Spring Batch 相同的步骤名称?

java - spring boot 启动应用程序失败,未指定数据库url

java - 从 sFtp 服务器读取文件

java - 多个读/写服务器-客户端

c++ - 用于跨线程分配和免费的良好分配器

multithreading - Delphi EOutOfResources 屏幕截图

c++ - 单调计数整数的比较安全吗?

java - 导入 com.sun.javadoc,与 Eclipse 和 Ant 一起使用

java - 最大高度 2-3 树

java - Spring 附加数据到当前事务