Tomcat 数据库重启时不重新连接 PostgreSQL JDBC 池
Tomcat not reconnecting PostgreSQL JDBC pools on DB restart
最近我们不得不重新启动我们的数据库服务器(是的,生产服务器),其中一个 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 Whosebug,但因为它涉及到双方,实际上不知道去哪里问。
可能会在数据库服务器重新启动时发生网络服务器连接池出现故障或无法重新连接到数据库。如果在数据库重新启动后无法重新启动 Tomcat 实例(最简单的选择),您应该配置连接池以测试、删除和替换连接。
请参阅 Tomcat 8 jdbc-pool guide 中的 validationQuery
、testOnConnect
和 testWhileIdle
属性。
最近我们不得不重新启动我们的数据库服务器(是的,生产服务器),其中一个 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 Whosebug,但因为它涉及到双方,实际上不知道去哪里问。
可能会在数据库服务器重新启动时发生网络服务器连接池出现故障或无法重新连接到数据库。如果在数据库重新启动后无法重新启动 Tomcat 实例(最简单的选择),您应该配置连接池以测试、删除和替换连接。
请参阅 Tomcat 8 jdbc-pool guide 中的 validationQuery
、testOnConnect
和 testWhileIdle
属性。