Tomcat连接Oracle 11g报错:网络适配器无法建立连接求解决
解决Java(Tomcat)连接Oracle 11g时的“Network Adapter could not establish the connection”问题
从你的描述来看,SQL Developer能正常连接但Java程序(包括Tomcat中的应用和测试类)都报连接超时,再结合JVM使用IPv6协议的环境信息,这大概率是Java网络协议栈优先使用IPv6,但Oracle数据库监听仅绑定IPv4地址导致的协议冲突。下面是具体的解决步骤:
1. 强制JVM使用IPv4协议
这是最直接有效的解决方案,核心是让Java程序切换到和数据库监听匹配的IPv4协议:
对于Tomcat服务器:
找到Tomcat安装目录下的catalina.bat(Windows)或catalina.sh(Linux),修改JAVA_OPTS配置,添加IPv4优先参数:# Linux/macOS示例 JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true" # Windows示例 set JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true修改后重启Tomcat,再测试数据库连接。
对于你的测试Java程序:
在STS IDE中,右键点击测试类 →Run As→Run Configurations,切换到Arguments标签页,在VM arguments输入框中添加:-Djava.net.preferIPv4Stack=true保存后重新运行测试程序,应该就能正常连接了。
2. 验证并调整Oracle监听配置(可选)
如果强制IPv4后仍有问题,可以检查Oracle的监听配置是否支持IPv6:
- 找到Oracle安装目录下的
$ORACLE_HOME/network/admin/listener.ora文件 - 确认
LISTENER的ADDRESS配置是否包含IPv6地址,或者设置为允许所有IP的0.0.0.0:
配置后重启Oracle监听服务(执行LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )lsnrctl stop再lsnrctl start)。
3. 调整JDBC连接字符串格式(可选)
尝试将原来的SID格式连接字符串:
"jdbc:oracle:thin:@9.2.2.2:1521:ORCL"
换成Oracle 11g推荐的服务名格式:
"jdbc:oracle:thin:@//9.2.2.2:1521/ORCL"
这种格式在IPv6环境下的地址解析兼容性更好。
为什么SQL Developer能正常连接?
SQL Developer通常会自动适配IPv4/IPv6环境,或者默认使用IPv4协议,所以不会出现Java程序的协议栈冲突问题。
内容的提问来源于stack exchange,提问作者Joby Wilson Mathews
相关产品推荐
相关产品推荐

