我有一个使用连接池从Oracle9i版本9.2.0.4数据库获取数据库连接的应用程序。应用程序托管在SJSAS 8.1中,驱动程序为ojdbc14.jar
版本10.1.0.4。
我遇到的问题是datasource.getConnection()
方法需要大约40秒才能在数据库关闭时抛出异常!这导致应用程序在数据库中断期间过载。我尝试使用数据源设置LoginTimeout=8
,但它没有效果。
请参阅下面我正在使用的数据源
<jdbc-connection-pool connection-validation-method="table"
datasource-classname="oracle.jdbc.pool.OracleDataSource"
fail-all-connections="true"
idle-time out-in-seconds="600"
is-connection-validation-required="true"
is-isolation-level-guaranteed="false"
max-pool-size="100"
max-wait-time-in-millis="8000"
name="mydb"
pool-resize-quantity="80"
res-type="javax.sql.DataSource"
steady-pool-size="20"
validation-table-name="dual">
<property name="url" value="jdbc:oracle:thin:@server1:1521:mydb"/>
<property name="user" value="user1"/>
<property name="LoginTimeout" value="8"/>
<property name="password" value="pass1"/>
</jdbc-connection-pool>
任何人都可以帮忙吗?我需要getConnection()
方法在给定的超时时间内超时。
答案 0 :(得分:0)
以下是一些尝试:
来自“Oracle®DatabaseJDBC Developer's Guide and Reference”。
将JDBC与防火墙一起使用
空闲连接的防火墙超时可能会切断连接。这可能导致JDBC应用程序在等待连接时挂起。您可以执行以下一个或多个操作,以避免因防火墙超时而导致连接被切断:
oracle.net.READ_TIMEOUT
传递给
连接属性以启用读取
套接字超时。超时值
是以毫秒为单位。tcp_keepalive_interval
。SQLNET.EXPIRE_TIME=1
在
服务器端的sqlnet.ora
文件。