You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.2.4中spring-data-opensearch-starter配置失败求助

Spring Boot 3.2.4 集成 spring-data-opensearch 正确配置方案

1. 依赖配置(pom.xml)

Spring Boot 3.2.4 适配 spring-data-opensearch 5.2.x 版本,需排除Spring Boot自带的Elasticsearch依赖避免冲突:

<dependencies>
    <!-- spring-data-opensearch 核心依赖 -->
    <dependency>
        <groupId>org.opensearch.data</groupId>
        <artifactId>spring-data-opensearch</artifactId>
        <version>5.2.1</version>
    </dependency>

    <!-- 排除Spring Boot自动引入的Elasticsearch相关依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

2. 禁用冲突的自动配置类

在启动类上排除Spring Boot的Elasticsearch自动配置,防止生成冲突的Bean:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
import org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientAutoConfiguration;

@SpringBootApplication(exclude = {
        ElasticsearchDataAutoConfiguration.class,
        RestClientAutoConfiguration.class
})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

3. 自定义OpenSearch客户端配置

spring-data-opensearch 5.x 采用官方Java Client(OpenSearchClient)而非旧版RestHighLevelClient,配置示例如下:

import org.opensearch.client.RestClient;
import org.opensearch.client.json.jackson.JacksonJsonpMapper;
import org.opensearch.client.opensearch.OpenSearchClient;
import org.opensearch.client.transport.rest_client.RestClientTransport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.opensearch.client.ClientConfiguration;
import org.springframework.data.opensearch.client.RestClients;

@Configuration
public class OpenSearchConfig {

    @Bean
    public OpenSearchClient openSearchClient() {
        // 配置OpenSearch连接信息
        ClientConfiguration clientConfig = ClientConfiguration.builder()
                .connectedTo("localhost:9200") // 替换为你的OpenSearch地址
                // 如需认证,添加以下配置
                // .withBasicAuth("username", "password")
                .build();

        RestClient restClient = RestClients.create(clientConfig).getRestClient();
        RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        return new OpenSearchClient(transport);
    }
}

4. 服务层适配调整

将原依赖RestHighLevelClient的代码改为注入OpenSearchClient:

import org.opensearch.client.opensearch.OpenSearchClient;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    private final OpenSearchClient openSearchClient;

    // 构造注入客户端
    public MyService(OpenSearchClient openSearchClient) {
        this.openSearchClient = openSearchClient;
    }

    // 业务方法示例
    public void executeSearch() throws IOException {
        // 示例:执行搜索操作
        // SearchResponse<YourEntity> response = openSearchClient.search(...);
    }
}

问题根源说明

  • 重复Bean错误:Spring Boot自动配置的Elasticsearch客户端与spring-data-opensearch的客户端冲突,排除自动配置即可解决。
  • RestHighLevelClient找不到:spring-data-opensearch 5.x已废弃该客户端,改用官方Java Client,需调整注入类型。
  • elasticsearchOperations创建失败:排除Elasticsearch自动配置后,spring-data-opensearch会自动生成OpenSearchRestTemplate作为该接口的实现,确保依赖正确即可。

内容的提问来源于stack exchange,提问作者ka3ak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:01:17