RestHighLevelClient调用Elasticsearch报UnknownHostException异常求助
问题根因
你注入的HOST参数值为http://go-test,包含了http://协议前缀,而HttpHost构造方法的第一个入参要求传入纯主机名/IP地址,不能携带协议头。程序会将http://go-test整体作为主机域名尝试DNS解析,最终抛出UnknownHostException异常。
解决方案
你可以任选以下任意一种方案修复:
- 方案一:修改
application.properties配置,删除HOST.URL的协议前缀:
# 调整后配置 HOST.URL=go-test
其余代码无需改动即可正常运行。
- 方案二:如果你需要保留
HOST.URL的完整URL格式,可在代码中先解析URL提取纯主机名,还可以同步提取端口、协议参数,避免多配置项不一致的问题:
@Value("${HOST.URL}") private String hostUrl; // 初始化RestHighLevelClient前先解析参数 URL url = new URL(hostUrl); String HOST = url.getHost(); int PORT = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); String SCHEMA = url.getProtocol();
补充说明
你之前用IP配置时正常,是因为IP配置没有携带协议前缀,符合HttpHost的入参要求;浏览器能正常访问是因为浏览器会自动拆分URL的协议、主机、端口字段,不会将协议头纳入主机名解析逻辑。
内容的提问来源于stack exchange,提问作者pappu_kutty
相关产品推荐
相关产品推荐

