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

如何查询Hibernate连接池的实际大小

确认Hibernate连接池实际大小的方法

首先说明前提:如果你未引入任何第三方连接池组件,Hibernate默认使用内置的DriverManagerConnectionProviderImpl连接池,默认大小确实为1;如果是Spring Boot项目,默认会自动引入HikariCP作为连接池,不会使用Hibernate内置连接池,HikariCP的默认最大连接数为10。

你可以通过以下三种方式确认实际连接池大小:

  • 方法1:运行时代码获取
    可以注入SessionFactory或DataSource实例,通过反射或者自带API读取连接池配置,代码示例如下:
// 适用于未引入第三方连接池,使用Hibernate内置连接池的场景
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
import org.hibernate.internal.SessionFactoryImpl;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import javax.annotation.Resource;

@Resource
private LocalContainerEntityManagerFactoryBean entityManagerFactory;

public int getBuiltInPoolSize() throws Exception {
    SessionFactoryImpl sessionFactory = entityManagerFactory.getNativeEntityManagerFactory().unwrap(SessionFactoryImpl.class);
    ConnectionProvider provider = sessionFactory.getConnectionProvider();
    if (provider.getClass().getCanonicalName().equals("org.hibernate.connection.DriverManagerConnectionProviderImpl")) {
        return (int) provider.getClass().getMethod("getPoolSize").invoke(provider);
    }
    return -1;
}

// 适用于使用HikariCP连接池的场景(Spring Boot默认场景)
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;

@Resource
private DataSource dataSource;

public int getHikariPoolSize() {
    if (dataSource instanceof HikariDataSource) {
        return ((HikariDataSource) dataSource).getMaximumPoolSize();
    }
    return -1;
}
  • 方法2:数据库端直接统计
    登录Postgres数据库执行以下SQL,统计当前应用的活跃连接数,压测过程中如果连接数始终稳定在某个固定值,该值就是连接池的最大大小:
SELECT count(*) FROM pg_stat_activity 
WHERE usename = '替换为你的数据库用户名' 
AND client_addr = '替换为你应用部署的服务器IP';
  • 方法3:查看应用启动日志
    Hibernate或连接池组件初始化时会打印连接池配置,你可以在启动日志中搜索pool size、maximumPoolSize等关键词,直接读取配置值。
临时调整连接池大小的方案

如果你暂时不打算引入第三方连接池,可以通过以下配置覆盖Hibernate内置连接池的默认大小:

注意:Hibernate官方明确提示内置连接池仅用于开发测试,不具备生产环境需要的性能、容错、监控等能力,生产环境建议优先使用HikariCP等成熟的第三方连接池组件
在你的application.properties配置文件中添加如下配置即可调整大小:

spring.jpa.properties.hibernate.connection.pool_size=10

如果使用yml配置,格式如下:

spring:
  jpa:
    properties:
      hibernate:
        connection:
          pool_size: 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:05