【问题标题】:Long time out from a jdbc call when an oracle database server is unreachable无法访问 oracle 数据库服务器时 jdbc 调用超时
【发布时间】:2020-01-30 03:11:54
【问题描述】:

我正在为连接到 7 个不同国家/地区特定 Oracle 数据库的 spring-boot 服务构建自定义健康检查。我想构建这些,以便我可以使用 spring-boot-admin 来监控服务。问题是当服务器不可用时,例如它关闭或防火墙配置不正确,超时需要很长时间,一分钟。 Spring-boot-admin 然后将服务器标记为不可访问而不是关闭。

据我了解,正在发生的事情是套接字永远不会连接,最终连接会遇到其他超时。在我的健康检查中,我尝试配置网络超时,但似乎没有任何区别。我们正在使用

https://docs.oracle.com/en/database/oracle/oracle-database/18/jjuar/oracle/ucp/jdbc/PoolDataSourceImpl.html

还有ojdbc7

运行状况检查使用为主池定义的数据源 bean,但如果设置网络超时为时已晚,我不确定该池是否已经创建。对我来说,问题是文档真的不清楚哪些属性是有效的。

我已经厌倦了这些,但它们似乎没有做任何事情

查看了这些链接

Setting Network Timeout for JDBC connection

JDBC getConnection timeout issue

PreparedStatement won't ever timeout even if explicitly set

这提供了有关超时类型的更多详细信息。

https://www.programering.com/a/MDNzIjMwATY.html

所以我的问题是应该如何真正建立一个预言池来应对网络/套接字、事务、池和语句超时?

【问题讨论】:

    标签: oracle spring-jdbc ojdbc health-monitoring ucp


    【解决方案1】:

    推荐的连接网址如下图所示。另外,请参考UCPTimeouts.java 查看超时相关属性。

     (DESCRIPTION =
             (CONNECT_TIMEOUT=90)  (RETRY_COUNT=20)(RETRY_DELAY=3) (TRANSPORT_CONNECT_TIMEOUT=3) 
               (ADDRESS_LIST =
                (LOAD_BALANCE=on)
                ( ADDRESS = (PROTOCOL = TCP)(HOST=primary-scan)(PORT=1521)))
                (ADDRESS_LIST =
                 (LOAD_BALANCE=on)
                ( ADDRESS = (PROTOCOL = TCP)(HOST=secondary-scan)(PORT=1521)))
               (CONNECT_DATA=(SERVICE_NAME = gold-cloud)))
    

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 2020-11-24
      • 2022-08-14
      • 2023-04-01
      • 1970-01-01
      • 2011-08-11
      • 2021-04-06
      • 2011-08-09
      • 2013-05-12
      相关资源
      最近更新 更多