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

Postgres是否真的需要空闲连接?Spring Boot连接池配置咨询

解决Spring Boot 1.5.x + Postgres 9.x过多空闲数据库连接问题

你选对路子啦——Spring Boot 1.5.x默认用的是Tomcat连接池,通过它的专属配置来管控空闲连接数,刚好能解决你生产环境里空闲连接飙到100的问题。我帮你补全并解释下完整的配置,确保能精准控制连接数量:

先给你完整的YAML配置(注意要嵌套在spring节点下,Spring Boot 1.5.x的数据源配置需要这个前缀):

spring:
  datasource:
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/db_name
    username: root
    password: root
    tomcat:
      max-idle: 20  # 核心配置:把默认的100改成你想要的最大空闲连接数,比如20
      min-idle: 5   # 保留少量空闲连接,避免频繁创建销毁连接的性能损耗
      initial-size: 5 # 启动时初始化的连接数
      max-active: 50 # 同时可使用的最大活跃连接数,别超过Postgres的max_connections
      remove-abandoned: true # 自动回收被遗忘的连接(比如代码没关Connection)
      remove-abandoned-timeout: 300 # 超时5分钟就回收这类连接
      log-abandoned: false # 生产环境建议关,避免日志冗余

重点配置项拆解:

  • max-idle:这就是你要改的核心参数,默认是100,改成20或者根据你的业务压力调整(建议20-50之间),直接限制空闲连接的上限。注意这个值绝对不能超过Postgres那边的max_connections(Postgres 9.x默认是100,你可以在数据库里执行SHOW max_connections;查看当前值)。
  • min-idle:留几个空闲连接在池里,能避免每次请求都重新创建连接的开销,5-10就够用了。
  • max-active:控制同时能被业务使用的最大连接数,要结合你的并发量来设,而且所有应用实例的这个值加起来不能超过Postgres的max_connections,不然会出现拿不到连接的错误。
  • 连接泄漏防护:remove-abandoned和remove-abandoned-timeout是兜底配置,万一代码里有连接没正确关闭,这俩参数能自动回收超时的连接,防止连接池被耗干。

配置完之后,你可以在Postgres里执行SELECT * FROM pg_stat_activity;查看连接状态,看看空闲连接数是不是降到了你设置的max-idle范围内,验证配置是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:57:52