Java使用RestTemplate调用API:本地正常JBoss部署报UnknownHostException
JBoss部署后RestTemplate调用API出现UnknownHostException的解决办法
UnknownHostException本质是目标API域名无法被服务器解析,以下是针对性排查和解决步骤:
先验证服务器网络连通性
- 登录JBoss所在服务器,执行
ping 目标API域名、nslookup 目标API域名命令,确认域名能否正常解析。如果解析失败,说明是服务器DNS配置问题,需更换为可用的DNS服务器(如公共DNS 8.8.8.8或内网指定DNS)。 - 若域名能解析但ping不通,大概率是服务器防火墙/安全组拦截了对外请求,需确认是否允许访问目标API的端口(通常是80/443)。
- 登录JBoss所在服务器,执行
检查RestTemplate配置
- 若代码中自定义了
ClientHttpRequestFactory(比如HttpComponentsClientHttpRequestFactory),需确认其代理、DNS相关配置在服务器环境下是否生效。本地的代理设置可能在服务器上不可用,建议先切换回默认工厂测试:RestTemplate restTemplate = new RestTemplate(new SimpleClientHttpRequestFactory());
- 若代码中自定义了
排查JBoss自身网络配置
- 打开JBoss的
standalone.xml或domain.xml,检查<system-properties>节点是否存在java.net.preferIPv6Addresses等影响DNS解析的参数,如有尝试调整或移除。 - 查看服务器
/etc/hosts文件,确认目标域名未被错误映射到无效IP。
- 打开JBoss的
调整JVM DNS缓存策略
- JVM默认会缓存DNS解析结果,过期缓存可能导致解析失败。在JBoss启动参数中添加以下配置,缩短DNS缓存时长:
-Dsun.net.inetaddr.ttl=60 -Dsun.net.inetaddr.negative.ttl=10
- JVM默认会缓存DNS解析结果,过期缓存可能导致解析失败。在JBoss启动参数中添加以下配置,缩短DNS缓存时长:
内容的提问来源于stack exchange,提问作者Sai
相关产品推荐
相关产品推荐

