Spring Batch连接池和多线程

问题描述 投票:1回答:1

我有一个带有Spring Batch 3.0.7和Java 8的Spring Boot 1.5应用程序。我最近收到了一些连接超时,当一个预定的作业尝试从5个线程开始,而另一个长时间运行的批处理作业正在运行。看起来组合的15个线程存在对连接的争用。我还没有找到任何文档,博客或问题似乎解决了Spring Batch中与线程和池的关联。

我有3个连接使用HikariCP,每个数据源配置为默认(10个连接):

  • batcdb(postgres)
  • readdb(oracle)
  • writedb(postgres)

我有两份工作:

  • 工作1(长期运行) - 最大池大小:10
  • 工作2(短期运行) - 最大池大小:5

我已经能够多次重现这个错误。

我想尝试不同的东西,所以我将我的AWS EC2实例类型提升到C4.xlarge,并设置max-pool-size:20。这是令人困惑的地方,而不是显示20个活动连接的HikariCP池,它始终保持10个连接活动,10个连接空闲。这告诉我在某个地方10号周围可能有不同的设置?

DEBUG 3054 --- [cdb housekeeper] com.zaxxer.hikari.pool.HikariPool : writedb - Pool stats (total=20, active=10, idle=10, waiting=0)

注意:我还观察到日志中的块日志输出大约20个线程,这会告诉我线程/ taskExecutor的行为与预期一致。

[taskExecutor-1]
...
[taskExecutor-20]

我宁愿不继续在我的应用程序中抛出更多连接以允许并发作业运行。任何建议和想法将不胜感激。

multithreading spring-boot spring-batch connection-pooling hikaricp
1个回答
1
投票

问题是由于核心/最大池大小和节流限制的数量不同。

我的配置:

core-pool-size: 20
max-pool-size: 20
throttle-limit: 10

当我将限制限制增加到20时,连接池日志记录显示所有20个连接都处于“活动”状态。

© www.soinside.com 2019 - 2024. All rights reserved.