我有一个应用程序,它使用连接池从 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()
方法在给定的超时时间内超时。
最佳答案
这里有一些可以尝试的事情:
摘自“Oracle® Database JDBC 开发人员指南和引用”。
将 JDBC 与防火墙结合使用
空闲连接的防火墙超时可能会中断连接。这可能会导致 JDBC 应用程序在等待连接时挂起。您可以执行以下一项或多项操作来避免由于防火墙超时而断开连接:
- 如果您正在使用连接缓存 或连接池,然后总是 将不活动超时值设置为 连接缓存更短 大于防火墙空闲超时值。
- 将
oracle.net.READ_TIMEOUT
传递为 连接属性以启用读取 套接字超时。超时值 以毫秒为单位。 - 对于 JDBC OCI 和 JDBC Thin
驱动程序,使用网络描述符
连接到数据库并指定
ENABLE=BROKEN 参数
连接中的描述子句
描述符。另外,设置一个较低的值
对于
tcp_keepalive_interval
。 - 通过设置启用 Oracle Net DCD
SQLNET.EXPIRE_TIME=1
在 服务器端的sqlnet.ora
文件。
关于java - JDBC getConnection超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945330/