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端口的错误:
- 在应用服务器上执行:
如果返回的IP是127.0.0.1或者localhost,说明DNS配置有问题:ping abc-def-dmz.demo.com nslookup abc-def-dmz.demo.com- 要么是本地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
相关产品推荐
相关产品推荐

