如何从池中删除无效的数据库连接

Dya*_*nth 11 java oracle tomcat connection-pooling

我正在使用tomcatoracle数据库的连接池.它运行正常,但是当我长时间使用我的应用程序后,它会给出" 连接重置 " 错误.我收到此错误是因为在tomcat数据源关闭逻辑连接之前oracle服务器上的物理连接已关闭.因此,在从数据源获取连接之前,我正在使用连接对象的isValid(0)方法检查连接有效性,如果物理连接已关闭,则该方法为false.但我不知道如何从池中删除无效的连接对象.

Joh*_*ane 9

这可能是因为在数据库服务器上,超时不允许连接超过设定的时间,或者如果它没有收到说它仍然有效的信息就会死掉.解决此问题的一种方法是打开Keepalive.这些基本上ping数据库服务器,说它们仍然是有效的连接.

是关于Tomcats DBCP配置的一个非常好的链接.请查看标题为"防止dB连接池泄漏"的部分.看起来这可能是一个好的起点.

  • 是的,我之前遇到过这种情况.您可以配置连接池以在指定的时间间隔内使用SQL查询(validationQuery)检查死连接.这是DBCP配置的一部分.您希望避免检入代码,因为您的代码应该不知道池或特定数据库. (2认同)

Dya*_*nth 6

我在server.xml文件中配置数据源时使用了validatationquery.它将在给予应用程序之前通过在数据库中执行查询来检查连接的有效性.

对于Oracle

validationQuery="/* select 1 from dual */"
Run Code Online (Sandbox Code Playgroud)

对于MySql

validationQuery="/* ping */"
Run Code Online (Sandbox Code Playgroud)