首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HikariCP对Spring引导的深入理解

HikariCP对Spring引导的深入理解
EN

Stack Overflow用户
提问于 2021-06-03 13:07:43
回答 1查看 60关注 0票数 0

我有一个spring引导应用程序,它使用spring数据和用于db连接池的hikaricp。我注意到以下行为在我看来很奇怪:

我有一个非事务性的方法,在该方法中,几个db查询是使用spring数据存储库执行的。

代码语言:javascript
运行
复制
public void testMethod(final Long firstRepositoryId, final Long secondRepositoryId) {

    final DomainObject result = firstRepository.findById(firstRepositoryId);
    // here there's some code that is processing the result without db queries
    secondRepository.findById(secondRepositoryId);
    // some more logic here without additional db queries
  }

因此,正如预期的那样,当方法上没有事务时,spring数据方法将打开一个用于执行查询的事务,并在方法返回后完成它。我启用了事务日志,因此有以下日志输出:

2021-06-03 15:34:30.961痕量c681f76a-5d7e-41d5-9e50-fb6f96169681 -34 659271212-291 o.s.t.i.TransactionInterceptor : com.test.FirstRepository.findById 2021-06-03 15:34:30.966 Tracec681f76a-5d7e-41d5-9e50-fb6f96169681- tp659271212-291 o.s.t.i.TransactionInterceptor :完成com.test.FirstRepository.findById 2021-06-03 :34:30的交易。967痕量c681f76a-5d7e-41d5-9e50-fb6f96169681 -34 659271212-291 o.s.t.i.TransactionInterceptor : com.test.SecondRepository.findById 2021-06-03 15:34:30.972 TRACE c681f76a-5d7e-41d5-9e50-fb6f96169681 -34 659271212-291 o.s.t.i.TransactionInterceptor :完成com.test.SecondRepository.findById的交易

一切似乎都和我所期望的完全一样。我不明白的是hikari的行为。此方法在http请求中调用。firstRepository.findById执行后立即从hikari获取连接,但只有在http控制器返回响应后才会在池中返回此连接。我所期望的是在事务打开后获取一个连接,并在事务完成后返回。是不是有什么东西我错过了,或者我有错误的配置?

我正在通过弹簧引导驱动器prometheus数据监视活动的hikari连接。为了能够再现我前面解释的行为,我将使用几个调试断点挂起连接线程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 05:47:29

我发现了导致这种行为的原因--为了能够在视图中检索延迟加载的数据,维护hibernate会话是Spring的功能。为了禁用它,您需要以下属性:

spring.jpa.open-in-view=false

下面是另一篇文章,其中解释了它的功能:

What is this spring.jpa.open-in-view=true property in Spring Boot?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67822073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档