当前位置: 首页 > 知识库问答 >
问题:

Hikari无法获取JDBC连接

谷梁德容
2023-03-14

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

org.springframework.web.util.嵌套异常:请求处理失败;嵌套异常org.springframework.dao.DataAccessResourceFailureExc0019:无法获取JDBC连接;嵌套异常org.hibernate.exception.JDBCConnectionExc0019:无法获取JDBC连接

原因:org。springframework。刀。DataAccessResourceFailureException:无法获取JDBC连接;嵌套的异常是org。冬眠例外JDBCConnectionException:无法获取JDBC连接

我们的数据源配置如下:

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

Spring数据源。希卡里。连接超时=36000

spring.datasource.hikari.maximum-池-大小=2

Spring数据源。希卡里。最大使用寿命=1800000

Spring数据源。希卡里。空闲超时=60000

Spring数据源。希卡里。验证超时=3000

Spring数据源。希卡里。泄漏检测阈值=240000

这里的任何人都可以给我一些线索,谢谢!

共有1个答案

柯升
2023-03-14

您可能有未结的交易。随着时间的推移,这些事务不断堆积,无法打开新的连接。连接超时命中,您将无法获取JDBC连接。

您需要检查所有的事务性方法,并确保完成后尽快关闭/提交它们

我想添加一个我们遇到这些问题的特定场景。这涉及一个用@Transactional Database connections注释的方法,在该方法中打开的@Transactional Database connections将位于打开的事务中,直到该方法退出。我们的程序的问题是,它很少进行HTTP调用,并且在HTTP调用完成之前,事务都是打开的。由于对该服务方法的调用越来越多,处于打开状态的事务比处于关闭状态的事务更多。

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

 类似资料:
  • 我有一个Hibernate和光数据源的Spring Boot项目。如果我使用注入的SessionFactory对象来获取会话对象,几天后,我会发现与数据库操作相关的任何方法都有这样的异常(只有重新启动才能解决这个问题): 似乎手动使用的会话使此问题。(我有类似的项目,具有相同的配置和功能,但没有注入SessionFactory和Session...我根本没有这样的问题) 应用程序. yaml: 数

  • 我通过动态创建具有以下属性的数据源来连接mysql数据库,它工作正常,但过了一段时间后,它一直给我错误“无法获取JDBC连接”。 它被托管在AWS和Tomcat环境中。DB是AWS的RDS。 更新: 原因:

  • 我正在运行一个带有Hibernate和Spring数据的Spring启动应用程序。我有以下方法: 当我第四次运行此方法时,我得到了无法获取 JDBC 连接异常。我怀疑当我调用存储过程“callEncrypt”时,Hibernate在作业完成后不会释放连接,因为如果我删除该行,应用程序就可以完美运行,无法手动关闭连接,因为Hibernate正在处理事务(并且没有理由这样做),所以我已经卡住了一段时间

  • 我有一个应用程序,它将C3p0与Hibernate5和Hibernate使用。我想尝试使用Hikari,但我无法运行该应用程序。 专家 Hibernate版本为:5.2.17.Final Spring配置 我尝试了上述方法的不同排列,包括将用户名和密码直接传递给数据源: 但是我总是以这个错误结束: 这是由光函数引起的:

  • 当我使用Japser报告生成报告时,我的Spring Boot工作正常。 我面临的问题是应用程序抛出Hibernate异常: 无法获取JDBC连接 在我多次生成报告后,我得到了这个错误。