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

手动关闭PGAdmin中DB连接后,Core Java应用无法获取新连接求助

问题根源

你手动通过PGAdmin关闭所有数据库连接后,连接池里的空闲连接已经在数据库端被终止,但Tomcat JDBC连接池本身无法感知到这个变化,后续尝试从池中获取连接时,拿到的都是失效的连接。由于没有配置连接有效性检测机制,连接池不会主动替换这些无效连接,导致必须重启应用才能重建连接池。

解决方案:调整连接池配置

针对Tomcat JDBC连接池,添加连接有效性检测相关参数,同时优化现有参数的合理性:

1. 核心配置调整

修改你的Context.xml,添加以下关键参数,并修正不合理的配置:

<Resource
    name="jdbc/connection"
    auth="Container"
    type="javax.sql.DataSource"
    maxTotal="200" <!-- 替换原maxActive,值匹配PostgreSQL的max_connections参数,默认通常为100-200 -->
    maxIdle="50" <!-- 不超过maxTotal,避免闲置过多连接 -->
    maxWait="100000"
    removeAbandoned="true"
    removeAbandonedTimeout="500"
    defaultAutoCommit="true"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    username="<username>"
    password="<pass>"
    driverClassName="org.postgresql.Driver"
    ssl="require"
    url="<host>"
    <!-- 连接有效性检测核心参数 -->
    testOnBorrow="true" <!-- 获取连接时检测有效性,确保拿到可用连接 -->
    validationQuery="SELECT 1" <!-- PostgreSQL通用的连接检测SQL -->
    testWhileIdle="true" <!-- 定期检测空闲连接,清理无效连接 -->
    timeBetweenEvictionRunsMillis="300000" <!-- 每5分钟运行一次空闲连接检测 -->
    minEvictableIdleTimeMillis="1800000" <!-- 空闲连接超过30分钟自动回收 -->
    validationInterval="30000" <!-- 30秒内同一连接不重复执行检测,减少开销 -->
/>

2. 参数说明

  • testOnBorrow="true":每次从连接池拿连接前,都会执行validationQuery检测连接是否有效,无效则丢弃并创建新连接,这是解决你问题的关键。
  • testWhileIdle="true":配合timeBetweenEvictionRunsMillis,定期扫描空闲连接,提前清理掉已经失效的连接,避免积累无效连接。
  • maxTotal:替换原maxActive(Tomcat JDBC池的新版参数,兼容旧版但更规范),值必须小于等于PostgreSQL数据库配置的max_connections(可通过SHOW max_connections;在PGAdmin中查看),你原配置的10000远超过数据库承载能力,会导致连接耗尽。
  • 移除了多余的MaxConnections参数:Tomcat JDBC池不使用这个参数,它属于PostgreSQL驱动的配置,若要设置需放在URL中(如url="jdbc:postgresql://host/db?maxConnections=200"),但建议通过连接池的maxTotal统一控制。

3. 额外建议

  • 确保你的PostgreSQL驱动版本是最新稳定版,旧版本可能存在连接检测的兼容性问题。
  • 若应用中有长时间未使用的连接,removeAbandoned和removeAbandonedTimeout会自动回收这些被遗弃的连接,现有配置的500秒(约8分钟)是合理的,无需调整。

调整配置后,即使你手动关闭数据库端的连接,连接池也会在获取连接时自动检测并替换无效连接,无需重启应用即可恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:43:13