Tomcat 在数据库重新启动时未重新连接 PostgreSQL JDBC 池

Posted

技术标签:

【中文标题】Tomcat 在数据库重新启动时未重新连接 PostgreSQL JDBC 池【英文标题】:Tomcat not reconnecting PostgreSQL JDBC pools on DB restart 【发布时间】:2016-04-07 01:44:42 【问题描述】:

最近我们不得不重新启动我们的数据库服务器(是的,一个生产服务器),其中一个 Tomcat 没有重新连接到 JNDI 资源。

这是我们的 JNDI 资源定义:

<Resource name="jdbc/postgres" auth="Container"
          type="javax.sql.DataSource"
          driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://10.1.0.104:5432/db"
          username="******" password="*****"
          maxTotal="30" maxIdle="5" maxWaitMillis="10000"
          logAbandoned="true" removeAbandonedOnBorrow="true"
          removeAbandonedOnMaintenance="true"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          validationQueryTimeout="5" validationQuery="select 1"
          testOnBorrow="true" />

软件版本:

Debian GNU/Linux 8.2(杰西) Apache Tomcat/8.0.14 OpenJDK 1.7.0_91-b02 x86_64-unknown-linux-gnu 上的 PostgreSQL 9.4.5,由 gcc (Debian 4.9.2-10) 4.9.2 编译,64 位

可能出了什么问题?为什么它没有自动重新连接?

PS:这可能是一个跨论坛的问题 dba vs ***,但因为它涉及双方实际上不知道在哪里问它。

【问题讨论】:

你之前的问题有什么不同? ***.com/questions/36139235/… 【参考方案1】:

在数据库服务器重新启动时,网络服务器连接池可能出现故障或无法重新连接到数据库。如果在数据库重新启动后无法重新启动 Tomcat 实例(最简单的选择),您应该配置连接池以测试、删除和替换连接。 请参阅Tomcat 8 jdbc-pool guide 中的validationQuerytestOnConnecttestWhileIdle 属性。

【讨论】:

我已经给出了validationQuery,但没有给出其他2个属性

以上是关于Tomcat 在数据库重新启动时未重新连接 PostgreSQL JDBC 池的主要内容,如果未能解决你的问题,请参考以下文章

数据库重新启动后尝试重新连接 jdbc 池数据源

启动 selendroid 服务器时未列出我的 Android 设备

启动相机意图时未调用 onActivityResult?

java项目启动时 到一半不动了 项目我重新从服务器上下的 tomcat也清理了几次,求助各位高手!

tomcat启动报错

SPRING BOOT 手动 War 文件部署到 Tomcat 并重新启动服务器,不创建数据库