Spring Boot 3升级遇RestHighLevelClient等Elasticsearch Bean缺失问题求助
解决Spring Boot 3.0升级后Elasticsearch相关Bean缺失问题
问题1:RestHighLevelClient Bean未找到
Spring Boot 3.0对应的Spring Data Elasticsearch 5.x虽保留了org.elasticsearch.client.RestHighLevelClient(标记为废弃),但默认不再自动配置该Bean,转而推荐使用官方新客户端co.elastic.clients.elasticsearch.ElasticsearchClient。
解决方式二选一:
- 临时继续使用废弃客户端:手动配置
RestHighLevelClientBean以适配现有代码@Configuration public class ElasticsearchConfig { @Bean public RestHighLevelClient restHighLevelClient(RestClientBuilder restClientBuilder) { return new RestHighLevelClient(restClientBuilder); } } - 迁移至新版客户端(推荐):升级ShedLock至兼容Spring Boot 3.0的版本(如5.0+),使用基于新版客户端的锁实现
@Bean public LockProvider lockProvider(ElasticsearchClient elasticsearchClient) { return ElasticsearchLockProvider.create(elasticsearchClient); }
问题2:ElasticsearchOperations Bean未找到
Spring Data Elasticsearch 5.x中ElasticsearchOperations接口仍存在,但默认配置的ElasticsearchRestTemplate已切换为依赖新版ElasticsearchClient。若你的代码仍依赖旧RestHighLevelClient驱动的实现,会出现Bean缺失。
解决方式:
- 保留旧客户端适配:手动配置基于
RestHighLevelClient的ElasticsearchRestTemplate@Bean public ElasticsearchOperations elasticsearchOperations(RestHighLevelClient restHighLevelClient, ElasticsearchConverter converter) { return new ElasticsearchRestTemplate(restHighLevelClient, converter); } - 迁移至新版栈:直接使用默认配置的
ElasticsearchOperations(依赖新版客户端,无需额外配置,确保spring-boot-starter-data-elasticsearch版本匹配Spring Boot 3.0)
废弃类/方法与Spring Data Elasticsearch 5.x对应映射
| 旧版类/方法(Spring Data Elasticsearch 4.x) | 新版替代(Spring Data Elasticsearch 5.x) | 备注 |
|---|---|---|
org.elasticsearch.client.RestHighLevelClient | co.elastic.clients.elasticsearch.ElasticsearchClient | 官方推荐的新客户端,基于Elasticsearch 8.x API |
ElasticsearchRestTemplate(依赖旧客户端) | ElasticsearchRestTemplate(依赖新版客户端) | ElasticsearchOperations接口保留,底层实现适配新API |
org.springframework.data.elasticsearch.core.query.Query | org.springframework.data.elasticsearch.core.query.Query | 接口保留,部分方法参数调整以适配新客户端 |
ElasticsearchRepository | ElasticsearchRepository | 接口无变更,底层实现自动适配新版客户端 |
内容的提问来源于stack exchange,提问作者Uday Patil
相关产品推荐
相关产品推荐

