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

如何在Spring Boot中不改动现有配置连接不同版本Elasticsearch

如何在Spring Boot中同时连接Elasticsearch 8.4.3和2.4(不修改现有配置)

问题描述

我在Spring Boot项目中使用spring-data-elasticsearch 4.4.5连接Elasticsearch 8.4.3,现在需要连接另一台老旧的Elasticsearch 2.4,但该版本的Spring Data不支持ES 2.4。请问如何在不修改现有配置的前提下连接这台旧ES?

现有配置与仓库代码

现有ES 8.4.3配置类

public class EsConfig extends ElasticsearchConfiguration {
    //
    @Override
    public ClientConfiguration clientConfiguration() {

        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo(esUrl)
                .usingSsl()
                .withBasicAuth(esUserName, esPassword)
                .withConnectTimeout(Duration.ofMillis(connectionTimeout))
                .withSocketTimeout(Duration.ofMillis(socketTimeout))
                .build();
        return clientConfiguration;
    }
}

现有Spring Data仓库接口

@Repository
public interface MyRepository extends ElasticsearchRepository<MyEntity, String> {

    ///
}

解决方案

由于spring-data-elasticsearch 4.4.5仅兼容Elasticsearch 7.x和8.x版本,与ES 2.4的协议、API差异极大,无法通过Spring Data的统一接口同时支持两个版本。因此需要单独引入ES 2.4专属客户端,与现有配置完全隔离,具体步骤如下:

1. 引入ES 2.4客户端依赖

在Maven中添加ES 2.4的elasticsearch-transport依赖,并排除spring-data-elasticsearch中自带的高版本ES依赖,避免冲突:

<!-- 保留原有的spring-data-elasticsearch依赖,排除冲突模块 -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>4.4.5</version>
    <exclusions>
        <exclusion>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 添加ES 2.4客户端依赖 -->
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.4.6</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch-transport</artifactId>
    <version>2.4.6</version>
</dependency>

2. 配置独立的ES 2.4客户端

创建一个独立的配置类,初始化ES 2.4的TransportClient,与现有ES 8.4.3的配置完全隔离:

@Configuration
public class Es24Config {

    @Value("${es24.cluster-name}")
    private String clusterName;

    @Value("${es24.nodes}")
    private String nodes; // 配置格式:host1:9300,host2:9300

    @Bean(name = "es24Client")
    public TransportClient es24Client() throws UnknownHostException {
        // 配置ES集群信息
        Settings settings = Settings.settingsBuilder()
                .put("cluster.name", clusterName)
                .build();

        TransportClient client = TransportClient.builder().settings(settings).build();
        // 解析节点地址并添加到客户端
        String[] nodeArray = nodes.split(",");
        for (String node : nodeArray) {
            String[] hostPort = node.split(":");
            client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostPort[0]), Integer.parseInt(hostPort[1])));
        }
        return client;
    }
}

3. 编写ES 2.4操作类

直接使用TransportClient实现对ES 2.4的CRUD操作,不依赖Spring Data的Repository:

@Service
public class Es24Service {

    @Autowired
    @Qualifier("es24Client") // 指定注入ES 2.4的客户端
    private TransportClient es24Client;

    // 示例:查询单条文档
    public Map<String, Object> getDocument(String index, String type, String id) {
        GetResponse response = es24Client.prepareGet(index, type, id).get();
        return response.isExists() ? response.getSource() : null;
    }

    // 示例:新增文档
    public void saveDocument(String index, String type, String id, Map<String, Object> data) {
        IndexResponse response = es24Client.prepareIndex(index, type, id)
                .setSource(data)
                .get();
        // 可根据response处理结果
    }

    // 其他操作(搜索、删除等)可参考ES 2.4的TransportClient API实现
}

关键说明

  • 此方案完全不修改原有ES 8.4.3的配置和Repository,两个ES集群的客户端相互独立,不会互相影响。
  • ES 2.4的TransportClient是该版本的官方客户端,需严格匹配ES版本(建议使用2.4.6,与ES 2.4.3兼容)。
  • 由于ES 2.4已停止维护,建议后续逐步迁移数据到高版本ES,避免长期维护多版本客户端的复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:14:54