如何实现Spring Data Elasticsearch 8.4仓库并替换已弃用的RestHighLevelClient
解决方案
在Spring Boot 2.7.3(对应Spring Data Elasticsearch 4.4.x)中,要基于新的ElasticsearchClient创建ElasticsearchOperations,只需注册ElasticsearchRestTemplate的Bean即可——它是ElasticsearchOperations接口的新实现,专门适配Elasticsearch 8.x的客户端,替代了旧版基于RestHighLevelClient的ElasticsearchTemplate。
步骤1:确保已正确配置ElasticsearchClient
如果还没完成基础客户端配置,参考以下代码:
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.json.jackson.JacksonJsonpMapper; import co.elastic.clients.transport.rest_client.RestClientTransport; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ElasticsearchClientConfig { @Bean public ElasticsearchClient elasticsearchClient() { // 初始化底层RestClient RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http") ).build(); // 配置传输层,绑定Jackson作为JSON处理器 RestClientTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper() ); return new ElasticsearchClient(transport); } }
步骤2:注册ElasticsearchOperations Bean
创建配置类,注入已有的ElasticsearchClient,实例化ElasticsearchRestTemplate(它实现了ElasticsearchOperations):
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.elc.ElasticsearchRestTemplate; import co.elastic.clients.elasticsearch.ElasticsearchClient; @Configuration public class ElasticsearchOperationsConfig { // 命名为elasticsearchTemplate,匹配@EnableElasticsearchRepositories默认依赖的Bean名称 @Bean(name = "elasticsearchTemplate") public ElasticsearchOperations elasticsearchOperations(ElasticsearchClient elasticsearchClient) { return new ElasticsearchRestTemplate(elasticsearchClient); } }
步骤3:保持Repository不变
你原来的ItemRepository无需修改,因为@EnableElasticsearchRepositories会自动检测并使用容器中的ElasticsearchOperations实现(即我们注册的ElasticsearchRestTemplate):
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface ItemRepository extends ElasticsearchRepository<Item, String> { // 自定义查询方法保持不变 }
关键说明
ElasticsearchRestTemplate是Spring Data Elasticsearch 4.x引入的新实现,完全适配Elasticsearch 8.x的ElasticsearchClient,替代了弃用的ElasticsearchTemplate。- 只要容器中存在
ElasticsearchOperations类型的Bean,@EnableElasticsearchRepositories就会自动使用它;如果Bean名称不是elasticsearchTemplate,可以通过@EnableElasticsearchRepositories(elasticsearchTemplateRef = "你的Bean名称")指定。 - 确保依赖版本匹配:Spring Boot 2.7.3会自动管理
spring-data-elasticsearch为4.4.x版本,与Elasticsearch 8.4.x兼容。
内容的提问来源于stack exchange,提问作者Jérémy
相关产品推荐
相关产品推荐

