You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换Hibernate默认连接池为HikariCP以解决连接耗尽问题

核心问题根源

你自定义的返回PGSimpleDataSource的DataSource Bean优先级高于Spring Boot的自动DataSource配置,这是你之前所有配置不生效、以及出现连接池耗尽报错的核心原因:

  • PGSimpleDataSource没有连接池能力,每次请求都会新建物理连接,并发稍高就会出现连接耗尽,直接触发你遇到的报错
  • Spring Boot默认会优先使用开发者自定义的DataSource Bean,自动装配逻辑完全失效,所以你修改spring.datasource.type等配置都不会生效

解决方案

方案一(推荐):删除自定义DataSource Bean

Spring Boot 2.x及以上版本默认集成HikariCP,只要引入了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖,删除你自定义的返回PGSimpleDataSource的Bean后,框架会自动装配Hikari连接池。

你只需要在配置文件中保留基础数据源配置即可:

spring:
  datasource:
    url: jdbc:postgresql://<数据库地址>:5432/<库名>
    username: <数据库用户名>
    password: <数据库密码>
    driver-class-name: org.postgresql.Driver
  # Hikari连接池可选配置,可根据业务调整参数
  hikari:
    minimum-idle: 5
    maximum-pool-size: 20
    idle-timeout: 30000
    connection-timeout: 30000

properties格式示例:

spring.datasource.url=jdbc:postgresql://<数据库地址>:5432/<库名>
spring.datasource.username=<数据库用户名>
spring.datasource.password=<数据库密码>
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=20

方案二:保留自定义Bean,修改为返回HikariDataSource

如果你确实需要手动定义DataSource Bean,修改配置类代码如下:

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.hikari")
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

对应配置文件写法为:

spring:
  datasource:
    hikari:
      jdbc-url: jdbc:postgresql://<数据库地址>:5432/<库名>
      username: <数据库用户名>
      password: <数据库密码>
      driver-class-name: org.postgresql.Driver
      minimum-idle: 5
      maximum-pool-size: 20

验证是否生效

项目启动后,查看日志会出现类似HikariPool-1 - Start completed.的输出,即可确认HikariCP已成功替换原有连接池。


内容的提问来源于stack exchange,提问作者Harsha Limaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:39:01