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
相关产品推荐
相关产品推荐

