Jdbc 如何在连接中断后自动重新连接Oracle连接池?

Jdbc 如何在连接中断后自动重新连接Oracle连接池?,jdbc,oracle10g,database-connection,connection-pooling,Jdbc,Oracle10g,Database Connection,Connection Pooling,我通过OracleConnectionCacheImpl遇到了Oracle连接池的问题。当我通过精简驱动程序连接到数据库服务器(Oracle 10g)上的连接池时,一切正常,直到经过一段未指定的时间后,数据库连接断开(可能是由于空闲连接?),我收到一条错误消息: 闭合连接 刷新页面并重新尝试连接将重新连接数据库,因此网络或数据库似乎没有问题。Oracle连接池是否可以验证其连接,并在池中的连接因任何原因已断开时重新连接 我正在使用ApacheTomcat6.0.18,JavaEE6更新11 (O

我通过OracleConnectionCacheImpl遇到了Oracle连接池的问题。当我通过精简驱动程序连接到数据库服务器(Oracle 10g)上的连接池时,一切正常,直到经过一段未指定的时间后,数据库连接断开(可能是由于空闲连接?),我收到一条错误消息:

闭合连接

刷新页面并重新尝试连接将重新连接数据库,因此网络或数据库似乎没有问题。Oracle连接池是否可以验证其连接,并在池中的连接因任何原因已断开时重新连接

我正在使用ApacheTomcat6.0.18,JavaEE6更新11


(Oracle精简驱动程序中似乎有一个ping函数。这有帮助吗?我在哪里可以找到它?

使用另一个连接池库,如C3P0,并使用该功能进行自动。

Apache DBCP(DB连接池)将在此处提供帮助。您可以使用“validationQuery”参数进行配置,该参数是一个SQL查询,在将连接提供给您之前,要在从池中删除的连接上运行。如果查询失败,将放弃连接,并创建一个新连接并提供给您

请参阅此处了解更多详细信息

请注意,每次从池中获得连接时都会调用validationQuery,因此需要尽可能快。例如:

SELECT id FROM users LIMIT 1;

您可以在context.xml中添加一些配置参数,以便tomcat连接池能够处理死连接。下面是context.xml的一个示例。请根据您的设置使用用户/密码/url/端口等

<?xml version="1.0" encoding="UTF-8"?>
<Context path="">
    <!-- Specify a JDBC data source -->
    <Resource name="jdbc/db" auth="Container"
              type="javax.sql.DataSource"
              username="user"
              password="password"
              driverClassName="driver.class.fullpath"
              url="jdbc:oracle://localhost:3306/
              maxActive="50"
              maxIdle="10"
              testOnBorrow="true"
              testWhileIdle="true"
              validationQuery="/* ping */"
              removeAbandoned="true"
              logAbandoned="true"/>
</Context>


1) 是否可以为关闭的连接添加整个堆栈跟踪2)是否将InactivityTimeout、TimeToLiveTimeout或ForwardedConnectionTimeout设置为任何非默认值?3) 是否使用ValidateConnection?4)应用程序服务器和数据库服务器之间的物理连接是否在网络级别被切断,例如被防火墙切断?我在哪里设置这些参数?我是Oracle编程新手,所以我不确定在哪里可以找到这些参数。在哪里可以找到ValidateConnection并强制重新连接?(在看到错误后立即刷新浏览器将立即修复问题。我不确定这是否是防火墙问题。)请参阅并发送整个错误堆栈,这将非常有助于+1验证连接。我在.NET world中遇到了同样的问题,必须将Validate Connection=true添加到连接字符串中。您的语法可能因jdbc而异。