Spring Boot 3使用Elasticsearch Client 5连接Elasticsearch 7.16是否可行?
Spring Data Elasticsearch 5 连接 Elasticsearch 7.16 的可行性及问题解决
一、兼容性说明
Spring Data Elasticsearch 5.x(适配Spring Boot 3)底层依赖Elasticsearch Java Client 8.x,按照官方兼容性规则,8.x版本客户端可以与7.16版本的Elasticsearch集群通信,但需要配置兼容性参数,同时部分高版本API在7.16集群上无法使用,建议优先调用ES 7.x兼容的API。
二、错误问题解决
1. UnknownHostException: http://localhost:9200
这个错误的核心是Elasticsearch地址配置错误:你将包含http://前缀的完整URL当作主机名传入客户端,导致DNS解析时把整个字符串http://localhost:9200当作主机查询,自然无法找到对应节点。
解决方法:
- 配置地址时仅保留主机+端口,例如
localhost:9200 - 配置文件示例:
spring.data.elasticsearch.client.reactive.endpoints=localhost:9200 spring.data.elasticsearch.client.reactive.use-ssl=false - 代码构建RestClient示例:
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http") ).build();
2. 使用已弃用客户端时的NoClassDefFoundError
Spring Data Elasticsearch 5.x已彻底移除对旧版erhlc(Elasticsearch Rest High Level Client)的依赖支持,默认使用新的elc(Elasticsearch Java Client)。此时强行使用AbstractReactiveElasticsearchConfiguration等旧类,会因为项目依赖的是ES 8.x客户端jar,缺少ES 7.x特有的类(比如org.elasticsearch.action.support.IndicesOptions)而报错。
解决方法:
- 放弃使用已弃用的
erhlc客户端实现,改用Spring Data Elasticsearch 5.x推荐的elc客户端 - 配置示例(使用新的配置类):
@Configuration public class ElasticsearchConfig extends AbstractElasticsearchConfiguration { @Override public ClientConfiguration clientConfiguration() { return ClientConfiguration.builder() .connectedTo("localhost:9200") .build(); } }
内容的提问来源于stack exchange,提问作者CodeWizard1985
相关产品推荐
相关产品推荐

