使用Spring Data JPA与Hikari连接池时如何关闭数据库连接
Spring Data JPA + Hikari场景下的数据库连接管理说明
不需要手动关闭数据库连接
你使用的Hikari是数据库连接池组件,本身就负责所有连接的获取、复用、回收、销毁的全生命周期管理,Spring框架已经对这部分逻辑做了完整封装,正常使用场景下不需要开发者手动写任何关闭连接的代码。
连接的自动回收逻辑
Spring Data JPA的数据库操作默认和事务绑定:
- 你在Service层的方法上加
@Transactional注解后,Spring会在事务启动时自动从Hikari连接池申请可用连接 - 当事务执行完成(提交或回滚)后,Spring会自动将连接归还给Hikari连接池供其他请求复用,不会真的销毁物理连接
- 只有当连接超过连接池配置的最大空闲时间等阈值时,Hikari才会自动销毁无用的连接
关于层归属的问题
你不需要在Service层或者Repository层写任何关闭连接的代码,这部分逻辑已经由Spring的事务切面在更上层统一处理了。
注意:绝对不要手动获取
Connection对象调用close()方法,这会直接销毁物理连接而不是归还给连接池,反而会导致连接池资源耗尽,引发服务不可用的问题。
额外代码优化建议
你贴的示例代码有两处不符合规范的地方可以调整:
- JpaRepository的第二个泛型参数是主键的包装类型,不能用基本类型
int,需要改为Integer - 接口命名建议遵循驼峰规范,首字母大写,比如改为
AbcRepository,示例调整后如下:
public interface AbcRepository extends JpaRepository<Abc, Integer> { List<Abc> findById(Integer id); }
内容的提问来源于stack exchange,提问作者Deepankar Vyas
相关产品推荐
相关产品推荐

