Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC getConnection超时问题_Java_Jdbc_Jakarta Ee - Fatal编程技术网

Java JDBC getConnection超时问题

Java JDBC getConnection超时问题,java,jdbc,jakarta-ee,Java,Jdbc,Jakarta Ee,我有一个应用程序,它使用连接池从Oracle9i 9.2.0.4版数据库获取数据库连接。应用程序托管在SJSAS 8.1中,驱动程序为ojdbc14.jarVersion10.1.0.4 我遇到的问题是datasource.getConnection()方法在数据库关闭时抛出异常大约需要40秒!这会导致应用程序在数据库中断期间过载。我尝试使用数据源设置LoginTimeout=8,但没有效果 请看下面我正在使用的数据源 <jdbc-connection-pool connection-va

我有一个应用程序,它使用连接池从Oracle9i 9.2.0.4版数据库获取数据库连接。应用程序托管在SJSAS 8.1中,驱动程序为
ojdbc14.jar
Version10.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®数据库JDBC开发人员指南和参考”

将JDBC与防火墙一起使用

空闲连接的防火墙超时可能会切断连接。这可能导致JDBC应用程序在等待连接时挂起。您可以执行以下一个或多个操作,以避免由于防火墙超时而断开连接:

  • 如果您使用的是连接缓存 或连接池,然后始终 在上设置非活动超时值 连接缓存将变短 超过防火墙空闲超时值
  • 将oracle.net.READ\u TIMEOUT传递为 要启用读取的连接属性 套接字超时。超时值 以毫秒为单位
  • 对于JDBCOCI和JDBCThin 驱动程序,使用网络描述符 连接到数据库并指定 中的ENABLE=breaked参数 connect中的DESCRIPTION子句 描述符。另外,设置一个较低的值 对于
    tcp\u保持有效\u间隔
  • 通过设置启用Oracle Net DCD
    SQLNET.EXPIRE\u TIME=1
    服务器端的
    sqlnet.ora
    文件

问题是关于“数据库何时关闭”。这使得你的整个答案无关紧要,它是相关的。前3个要点是您在客户端而不是数据库端所做的所有事情。这是为了让客户端更快地超时。