Tomcat在数据库重启时没有重新连接PostgreSQL JDBC池

时间:2016-04-07 01:44:43

标签: tomcat jdbc database-connection jndi tomcat8

最近我们不得不重启我们的数据库服务器(是的,一个生产者),其中一个Tomcats没有重新连接到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(jessie)
  • 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 stackoverflow,但因为它涉及到双方都不知道实际上在哪里问它。

1 个答案:

答案 0 :(得分:1)

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