![](/img/trans.png)
[英]JDBC - No connection is available - SpringBoot/Hikari/JPA - spring.jpa.open-in-view
[英]Springboot JPA Repository not releasing Hikari DB Connection
我在 Springboot 中有一个 rest API 使用 Hikari 进行连接池。 Hikari 与默认配置一起使用(池中有 10 个连接,等待连接超时 30 秒)。 API本身就很简单
public ResponseEntity analyseData(int companyId) {
Company company = companyRepository.findById(companyId);//takes 20ms
Analysis analysis = callRemoteRestAPI(company.data) //takes 120seconds
return ResponseEntity.status(200).body(analysis);
}
该代码没有任何 @Transactional 注释。 我发现 JDBC 连接在我的 API 的整个持续时间内(即约 120 秒)都保持不变。 因此,如果我们收到超过 10 个请求,它们会超时等待 hikari 连接池(30 秒)。 但严格来说,我的 API 在 JPA 查询完成后不需要连接(上面的第 1 步)。
有没有办法让 spring 在查询后立即释放此连接,而不是保持它直到整个 API 完成处理? 可以将 Spring 配置为获得每个 JPA 请求的连接吗? 这样,如果我有多个 JPA 查询,其中散布着非常慢的操作,则服务器吞吐量不会受到影响,并且它可以处理超过 10 个并发 API 请求。 .
Essentially the problem is caused by the Spring OpenSessionInViewFilter that " binds a Hibernate Session to the thread for the entire processing of the request " This essentially acquires a connection from the pool when the first JPA query is executed and then holds on to it till the request被处理。
此页面 - https://www.baeldung.com/spring-open-session-in-view提供了有关此功能的清晰简洁的说明。 它有其优点和缺点,目前的意见似乎对它的使用存在分歧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.