You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring应用使用Hikari Connection Pool连接Oracle数据库时初始化连接池失败的解决办法

解决Hikari连接Oracle LDAP时的Connection Refused错误

看起来你的Hikari连接池在尝试连接Oracle数据库的LDAP服务时,错误地转向了localhost:876,而不是你指定的abc-def-dmz.demo.com。下面是一步步的排查和解决方法:

1. 先确认JDBC URL的格式正确性

Oracle通过LDAP连接的JDBC URL格式必须严格遵循规范,尤其是LDAPS的情况:
正确的格式应该是:

jdbc:oracle:thin:@ldaps://<ldap-host>:<port>/<service-name>,cn=OracleContext,<dc-components>

检查你的URL:

  • 有没有多余的空格?比如SOM_APP,cn=oraclecontext之间如果有空格,会导致解析错误,让驱动误以为LDAP服务器是本地。
  • 确认cn=oraclecontext的大小写?Oracle LDAP条目通常是大小写敏感的,确保和LDAP服务器上的配置一致。

2. 验证LDAP服务器的网络可达性

错误提示Connection refused,首先要确认应用服务器能不能访问目标LDAP服务器的876端口:

  • 在应用服务器上执行命令测试连接:
    telnet abc-def-dmz.demo.com 876
    # 或者用nc(如果安装了的话)
    nc -zv abc-def-dmz.demo.com 876
    
    如果连接失败,说明:
    • 目标服务器的876端口没有对外开放
    • 应用服务器和LDAP服务器之间有防火墙/安全组拦截了流量
      这种情况需要联系运维团队开放对应的端口和网络策略。

3. 检查DNS解析是否正常

如果应用服务器把abc-def-dmz.demo.com解析成了localhost,就会出现连接本地876端口的错误:

  • 在应用服务器上执行:
    ping abc-def-dmz.demo.com
    nslookup abc-def-dmz.demo.com
    
    如果返回的IP是127.0.0.1或者localhost,说明DNS配置有问题:
    • 要么是本地hosts文件被错误配置,把该域名指向了localhost
    • 要么是公司DNS服务器的解析记录有误
      修复DNS解析或者在hosts文件里添加正确的IP映射即可。

4. 配置LDAPS的SSL信任库(关键步骤)

因为你用的是ldaps://(SSL加密的LDAP),JVM默认不会信任LDAP服务器的证书,这也可能导致连接失败或者解析异常:
在Spring的配置文件(比如application.properties)里添加SSL信任库的配置:

spring.datasource.hikari.data-source-properties.javax.net.ssl.trustStore=/path/to/your/truststore.jks
spring.datasource.hikari.data-source-properties.javax.net.ssl.trustStorePassword=your-truststore-password

或者如果用YAML配置:

spring:
  datasource:
    hikari:
      data-source-properties:
        javax.net.ssl.trustStore: /path/to/your/truststore.jks
        javax.net.ssl.trustStorePassword: your-truststore-password

你需要先把LDAP服务器的SSL证书导入到JKS格式的信任库中(可以用keytool命令完成)。

5. 确认Hikari配置正确传递了URL

确保Spring配置里的JDBC URL没有被截断或转义错误:

  • 如果是application.properties,直接配置即可:
    spring.datasource.url=jdbc:oracle:thin:@ldaps://abc-def-dmz.demo.com:876/SOM_APP,cn=oraclecontext,dc=demo,dc=com
    spring.datasource.hikari.driver-class-name=oracle.jdbc.OracleDriver
    spring.datasource.username=your-db-username
    spring.datasource.password=your-db-password
    
  • 如果是application.yml,因为URL里有特殊字符,必须用引号包裹:
    spring:
      datasource:
        url: "jdbc:oracle:thin:@ldaps://abc-def-dmz.demo.com:876/SOM_APP,cn=oraclecontext,dc=demo,dc=com"
        hikari:
          driver-class-name: oracle.jdbc.OracleDriver
        username: your-db-username
        password: your-db-password
    

6. 验证LDAP服务条目是否存在

最后,可以用LDAP查询工具确认目标服务条目存在:

ldapsearch -H ldaps://abc-def-dmz.demo.com:876 -b "cn=oraclecontext,dc=demo,dc=com" "(cn=SOM_APP)"

如果这个命令返回了数据库的连接信息(比如主机、端口、服务名),说明LDAP服务器的配置是正确的;如果没有返回结果,需要联系LDAP管理员检查SOM_APP这个服务条目是否正确创建。


内容的提问来源于stack exchange,提问作者One Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:02:29