我正在通过OracleConnectionCacheImpl遇到Oracle连接池的问题。当我通过瘦驱动程序连接到我的数据库服务器(Oracle 10g)上的连接池时,一切正常,直到一个未指定的时间,数据库连接被丢弃(可能是由于空闲连接?),我收到一条错误消息:< / p>
封闭连接。
刷新页面并重新尝试连接会重新连接数据库,因此它似乎不是网络或数据库的问题。如果池中的连接因任何原因死亡,Oracle连接池是否可以验证其连接并重新连接?
我正在使用Apache Tomcat 6.0.18,Java EE6 update 11。
(Oracle瘦驱动程序中似乎有一个ping函数。这有帮助,我在哪里可以找到它?)
答案 0 :(得分:0)
Apache DBCP(数据库连接池)将在这里提供帮助。您可以使用'validationQuery'参数进行配置,该参数是在从池中删除之前从池中删除的连接上运行的SQL查询。如果查询失败,则会丢弃该连接并创建一个新连接并将其提供给您。
有关详细信息,请参阅此处http://commons.apache.org/proper/commons-dbcp/configuration.html。
注意,每次从池中获取连接时都会调用validationQuery,因此需要尽可能快。例如:
SELECT id FROM users LIMIT 1;
答案 1 :(得分:0)
您可以在context.xml中添加一些配置参数,以便tomcat连接池将处理死连接。以下是context.xml的一个示例,请根据您的设置使用user / password / url / ports等。
<?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>
答案 2 :(得分:-1)
使用另一个连接池库,例如C3P0,并将该功能用于自动reconnect。