- 背景
公司mysql使用的是华为云RDS,由于要做一些测试验证,需要本地通过VPN直连华为RDS节点;找运维配置好网络后,本地 telnet 内网ip 3306 以及通过navicat客户端都能正常连接数据库;但是本地启动的服务就是连接不上。 - 问题排查
- 先检查服务中配置的 ip 端口 库名 账号 密码等信息完全正确
- 检查网络、rds白名单都正常
- 同样的代码连接个人的mysql 也能正常连接
-
最终解决
在Springboot 启动参数中加 -Djava.net.preferIPv4Stack=true 就解决了
-
原因分析
使用-Djava.net.preferIPv4Stack=true选项可以强制应用程序在IPv4协议栈上运行。这个选项的作用是告诉Java虚拟机(JVM)优先使用IPv4而不是IPv6。
使用-Djava.net.preferIPv4Stack=true选项可以解决一些与IPv6相关的网络问题,因为在某些环境中,IPv6配置可能不正确或受限,从而导致无法正常建立连接。通过强制应用程序使用IPv4协议栈,可以绕过这些IPv6相关的问题。
当然,这只是导致程度无法连接的一种可能得原因