我有一个带有Spring Batch 3.0.7和Java 8的Spring Boot 1.5应用程序。我最近收到了一些连接超时,当一个预定的作业尝试从5个线程开始,而另一个长时间运行的批处理作业正在运行。看起来组合的15个线程存在对连接的争用。我还没有找到任何文档,博客或问题似乎解决了Spring Batch中与线程和池的关联。
我有3个连接使用HikariCP,每个数据源配置为默认(10个连接):
我有两份工作:
我已经能够多次重现这个错误。
我想尝试不同的东西,所以我将我的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]
我宁愿不继续在我的应用程序中抛出更多连接以允许并发作业运行。任何建议和想法将不胜感激。
问题是由于核心/最大池大小和节流限制的数量不同。
我的配置:
core-pool-size: 20
max-pool-size: 20
throttle-limit: 10
当我将限制限制增加到20时,连接池日志记录显示所有20个连接都处于“活动”状态。