【发布时间】:2021-02-07 15:46:14
【问题描述】:
Spring Boot中是否有控制数据库连接释放策略的方法?类似于 Hibernate 的ConnectionReleaseMode?
我的测试代码大致如下:
- 插入查询
- HTTP 调用
- 更新查询
INSERT 和 UPDATE 查询是它们自己在存储库 bean 中的方法(扩展 CrudRepository 或作为 Mybatis @Mapper)。 HTTP 调用在它自己的 bean 中。
现在我的服务 bean 是我尝试不同 @Transactional 设置的地方,因为我的最终目标是在单个事务中执行这三个步骤。
问题是,HTTP 调用可能需要数百毫秒,而 Spring 在此期间保持数据库连接。这很快会导致连接池为空,而连接本身则处于空闲状态。
我使用spring-boot-starter-data-jpa 和mybatis-spring-boot-starter 对默认配置进行了相同的实验。
唯一让我更接近目标的是将spring.jpa.open-in-view=false 设置为data-jpa,这将在完全不使用@Transactional 或传播设置为NEVER 的情况下释放数据库连接。但是,如果它全部包裹在一个事务中,它就行不通了。
我觉得我错过了 Spring 中事务概念的一些重要部分。虽然 Spring reference docs mentions release mode 仅与 JTA 事务管理器 + JEE 容器 + Hibernate 有关。
【问题讨论】:
标签: spring spring-boot hibernate jpa spring-mybatis