gpt4 book ai didi

java - Hikari 无法获取 JDBC 连接

转载 作者:行者123 更新时间:2023-11-29 04:17:02 26 4
gpt4 key购买 nike

我们的项目中有 Spring-boot/Hibernate/MYSQL 应用程序,并使用 Hikari 作为连接池。几分钟后,当我们的服务启动时,我们发现了以下问题:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

Caused by: org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

我们的数据源配置如下:


spring.datasource.type=com.zaxxer.hikari.HikariDataSource

spring.datasource.hikari.connection-timeout=36000

spring.datasource.hikari.maximum-pool-size=2

spring.datasource.hikari.max-lifetime=1800000

spring.datasource.hikari.idle-timeout=60000

spring.datasource.hikari.validation-timeout=3000

spring.datasource.hikari.leak-detection-threshold=240000

有哪位大侠可以指教一下,谢谢!

最佳答案

您可能打开了从未关闭的交易。随着时间的推移,这些事务不断堆积,无法打开新的连接。连接超时,您无法获取 JDBC 连接。

您需要检查您所有的交易方法,并确保在完成后立即关闭/提交它们

我想添加一个我们遇到这些问题的特定场景。这涉及一个用@Transactional 注释的方法在此方法中打开的数据库连接将在打开的事务中,直到此方法退出。我们程序的问题是,它进行了很少的 HTTP 调用,并且在 HTTP 调用完成之前交易将打开。随着对该服务方法的调用越来越多,处于打开状态的事务多于关闭状态。

这个故事的寓意:打开交易,快速完成你的工作,然后关闭交易;通过退出标记为@Transactional 的方法隐式或通过显式调用事务关闭。

关于java - Hikari 无法获取 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51665095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com