java - JDBC getConnection超时问题

标签 java jdbc jakarta-ee

我有一个应用程序,它使用连接池从 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/

相关文章:

java - 你能改变所有这些东西(JCheckBox)去数组和循环吗?

java - 尝试使用 Google 游戏服务登录时出错

java - 从 Java 登录到 MSSQL 服务器的问题

java - 创建表时出错

java - 通过 RMI 调用接收代理作为参数时如何获取真实对象?

jsp - 如何从 JAX-RS 服务转发到 JSP?

java - 使用 java 程序发送的 Outlook 电子邮件中未应用粗体样式

java - 如何强制子类作为参数(或不允许父类作为参数)

java - libGDX:3d 动画不工作

java - 同步了一个从 jdbc 调用的 oracle 包