全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

Spring Boot数据库连接池优化

Spring Boot 2.x 默认使用 HikariCP 作为数据库连接池。

HikariCP核心配置

YAML
spring:
  datasource:
    hikari:
      # 连接池大小
      maximum-pool-size: 20
      minimum-idle: 5

      # 超时配置
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000

      # 连接验证
      validation-timeout: 5000
      leak-detection-threshold: 60000

      # 连接池名称
      pool-name: SpringBootHikariCP

参数详解

参数默认值说明
maximum-pool-size10最大连接数
minimum-idle与max相同最小空闲连接
connection-timeout30000ms获取连接超时
idle-timeout600000ms空闲连接超时
max-lifetime1800000ms连接最大存活时间
leak-detection-threshold0连接泄露检测阈值

连接数计算公式

YAML
最大连接数 = (核心数 * 2) + 有效磁盘数

示例:4核CPU + 1块磁盘
最大连接数 = (4 * 2) + 1 = 9

实际需结合并发量和SQL执行时间调整。

连接池监控

Actuator端点

Java
management:
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        include: health,metrics

自定义监控

Java
@Component
public class HikariMetrics {

    @Autowired
    private DataSource dataSource;

    @Scheduled(fixedRate = 5000)
    public void monitorHikariPool() {
        HikariDataSource hikari = (HikariDataSource) dataSource;
        HikariPoolMXBean pool = hikari.getHikariPoolMXBean();

        log.info("活跃连接: {}, 空闲连接: {}, 等待线程: {}",
            pool.getActiveConnections(),
            pool.getIdleConnections(),
            pool.getThreadsAwaitingConnection());
    }
}

常见问题排查

连接泄露

Java
现象:日志出现 "Connection leak detection"
原因:未正确关闭数据库连接
解决:检查事务管理,确保使用 @Transactional

连接等待超时

text
现象:SQL执行报 "Connection is not available"
原因:连接池过小或SQL执行过慢
解决:增大连接池或优化慢SQL

连接池预热

text
@Component
public class PoolWarmUp implements ApplicationRunner {

    @Autowired
    private DataSource dataSource;

    @Override
    public void run(ApplicationArguments args) {
        HikariDataSource hikari = (HikariDataSource) dataSource;
        // 初始化最小空闲连接
        hikari.getHikariPoolMXBean().getIdleConnections();
    }
}

多数据源配置

text
@Configuration
public class DataSourceConfig {

    @Primary
    @Bean("primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean("secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }
}

优化建议

场景建议配置
高并发短连接增大maximum-pool-size
长时间事务增大max-lifetime
连接不稳定减小validation-timeout
开发环境设置leak-detection检测

要点总结

  • maximum-pool-size按CPU核心数计算
  • minimum-idle与maximum保持一致减少抖动
  • 开启leak-detection检测连接泄露
  • 生产环境配置连接池监控告警

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring Boot性能瓶颈分析
下一篇 → Spring Boot监控指标体系
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库