Spring boot 通过HikariCP深入了解弹簧靴

Spring boot 通过HikariCP深入了解弹簧靴,spring-boot,hibernate,spring-data,hikaricp,Spring Boot,Hibernate,Spring Data,Hikaricp,我有一个spring启动应用程序,它使用spring数据和hikaricp进行db连接池。我注意到以下行为对我来说很奇怪: 我有一个方法不是事务性的,在该方法中,使用spring数据存储库执行多个db查询 public void testMethod(final Long firstRepositoryId, final Long secondRepositoryId) { final DomainObject result = firstRepository.findById(fir

我有一个spring启动应用程序,它使用spring数据和hikaricp进行db连接池。我注意到以下行为对我来说很奇怪:

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

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---[tp659271212-291]o.s.t.i.TransactionInterceptor:获取[com.test.FirstRepository.findById]的事务 2021-06-03 15:34:30.966跟踪c681f76a-5d7e-41d5-9e50-fb6f96169681---[tp659271212-291]o.s.t.i.TransactionInterceptor:完成[com.test.FirstRepository.findById]的事务 2021-06-03 15:34:30.967跟踪c681f76a-5d7e-41d5-9e50-fb6f96169681---[tp659271212-291]o.s.t.i.TransactionInterceptor:获取[com.test.SecondRepository.findById]的事务 2021-06-03 15:34:30.972跟踪c681f76a-5d7e-41d5-9e50-fb6f96169681---[tp659271212-291]o.s.t.i.TransactionInterceptor:完成[com.test.SecondRepository.findById]的事务

一切似乎正是我所期望的。我不能理解的是hikari的行为。此方法在http请求中调用。在firstRepository.findById执行之后立即从hikari cp获取连接,但是只有在http控制器返回响应之后,才会在池中返回此连接。我所期望的是在打开事务后建立连接,并在事务完成后返回。是否有什么我错过了或可能我有一些错误的配置

另外,我正在通过spring boot actuator prometheus数据监控激活的hikari连接。为了能够重现我上面解释的行为,我将使用几个调试断点挂起连接线程