我正在使用连接池 tomcat的 同 神谕 数据库。它工作正常,但是当我在很长一段时间后使用我的应用程序时它会给出“连接重置“。我收到此错误是因为在tomcat数据源关闭逻辑连接之前oracle服务器上的物理连接已关闭。所以在从数据源获取连接之前,我正在检查连接的有效性 的isValid(0) 连接对象的方法,如果物理连接关闭则给出错误。但我不知道该怎么做 去掉 那 连接无效 池中的物体。
我正在使用连接池 tomcat的 同 神谕 数据库。它工作正常,但是当我在很长一段时间后使用我的应用程序时它会给出“连接重置“。我收到此错误是因为在tomcat数据源关闭逻辑连接之前oracle服务器上的物理连接已关闭。所以在从数据源获取连接之前,我正在检查连接的有效性 的isValid(0) 连接对象的方法,如果物理连接关闭则给出错误。但我不知道该怎么做 去掉 那 连接无效 池中的物体。
这可能是因为在数据库服务器上,超时不允许连接超过设定时间,或者如果它没有收到说它仍然有效的信息就会死掉。解决此问题的一种方法是打开Keepalive。这些基本上ping数据库服务器,说它们仍然是有效的连接。
这个 是Tomcats DBCP配置上非常好的链接。请查看标题为“防止dB连接池泄漏”的部分。看起来这可能是一个好的起点。
这可能是因为在数据库服务器上,超时不允许连接超过设定时间,或者如果它没有收到说它仍然有效的信息就会死掉。解决此问题的一种方法是打开Keepalive。这些基本上ping数据库服务器,说它们仍然是有效的连接。
这个 是Tomcats DBCP配置上非常好的链接。请查看标题为“防止dB连接池泄漏”的部分。看起来这可能是一个好的起点。
我用了 validatationquery 在配置数据源时 server.xml中 文件。它将在给予应用程序之前通过在数据库中执行查询来检查连接的有效性。
对于 神谕
validationQuery="/* select 1 from dual */"
对于 MySQL的
validationQuery="/* ping */"
如果它无效,请尝试关闭它并打开它。我的意思是你会以这种方式重新初始化它,所以你不需要将它从池中删除并重用它。
如果我们想从Tomcat jdbc连接池中处理一个生病的java.sql.connection,
我们可以在程序中明确地这样做。 将其解包到org.apache.tomcat.jdbc.pool.PooledConnection中, setDiscarded(true)并最终关闭JDBC连接。 ConnectionPool将在返回后删除基础连接。
(ConnectionPool.returnConnection(....))
例如 PooledConnection pconn = conn.unwrap(PooledConnection.class); pconn.setDiscarded(真); conn.close();