JDBC - 没有连接可用 - SpringBoot/Hikari/JPA - spring.jpa.open-in-view

JDBC - No connection is available - SpringBoot/Hikari/JPA - spring.jpa.open-in-view


问题

我们现在面临着JDBC连接的问题,当我们运行负载测试的时候。几个小时都很顺利,但突然线程开始进入待定状态。 我检查了代码,没有发现我们在故意泄露任何连接。我在日志中看到的唯一的烟雾与我们的JPA调用有关。但它仍然没有回答为什么我们遇到了没有连接的问题。 我们使用的是Spring Boot 2.4.7, Hibernate 5.4.25, Hikari CP 3.4.5, JPA 2.2

日志 -

1 [LogType:Usage] DEBUG [payment-service,,] [15] [HikariPool-1 connection adder] [com.zaxxer.hikari.pool.HikariPool] HikariPool-1 - Added connection org.mariadb.jdbc. MariaDbConnection@44a351b0


  1. [HikariPool-1管家] [com.zaxxer.hikari.pool.ProxyLeakTask] org.mariadb.jdbc.MariaDbConnection@44a351b0的连接泄漏检测在线程http-nio-8080-exec-10上触发,堆栈跟踪如下\u2028java.lang.Exception。Apparent connection leak detected\u2028 at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)\u2028 at org.hibernate.engine.jdbc.connection.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl. java:122)\u2028 at org.hibernate.internal.NonContextualJdbcConnectionAccess.getConnection(NonContextualJdbcConnectionAccess.java:38)\u2028 at

  1. [LogType:Usage] [com.zaxxer.hikari.pool.ProxyLeakTask] 先前报告的泄漏连接org.mariadb.jdbc.Discover() 线程http-nio-8080-exec-10上的MariaDbConnection@44a351b0被返回到池中(未泄露)

  1. [HikariPool-1 connection closer] [com.zaxxer.hikari.pool.PoolBase] HikariPool-1 - Closing connection org.mariadb.jdbc。 MariaDbConnection@44a351b0: (connection has passed maxLifetime)

但是在这中间我们看到,这就是我们的负载测试开始失败的地方->

[LogType:Usage] DEBUG [14] [HikariPool-1 housekeeper] [com.zaxxer.hikari.pool.HikariPool] HikariPool-1 - Pool stats(总数=15, active=15, idle=0, waiting=75)


配置 - connectionleakthreshold - 3000 (我们试过30000,但发现行为相同) 连接超时 - 30000

答案1

请阅读属性 - spring.jpa.open-in-view

https://raul8804.wordpress.com/2019/03/31/spring-boot-project-db-connection-leak-investigation/

这很奇怪,Spring如何为所有控制器添加事务。