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

Spring Boot升级至2.2.0.RELEASE后Elasticsearch无法正常运行

问题根本原因

Spring Boot 2.2.0.RELEASE 配套的 Spring Data Elasticsearch 3.2.x 版本做了核心变更:

  • 官方默认优先基于 RestHighLevelClient 自动装配 ElasticsearchRestTemplate
  • 原有基于 TransportClient 实现的 ElasticsearchTemplate 不再默认自动注册到Spring容器,因为TransportClient已经被Elasticsearch官方标记为废弃,未来版本会彻底移除。

解决方案

方案一:沿用原有TransportClient逻辑(临时兼容,不推荐长期使用)

如果暂时不想改原有逻辑,手动开启TransportClient的自动配置即可:

  1. 在application.yml/application.properties中添加配置,启用TransportClient自动装配:
spring.data.elasticsearch.repositories.enabled=true
# 替换为实际的ES集群地址、名称
spring.data.elasticsearch.cluster-nodes=ES节点IP:9300
spring.data.elasticsearch.cluster-name=ES集群名称
  1. 如果上述配置不生效,直接手动注册ElasticsearchTemplate Bean到容器,修改CustomCdrElasticConfig类即可:
@Configuration
public class CustomCdrElasticConfig {

    // 先构建TransportClient Bean
    @Bean
    public TransportClient elasticsearchClient() throws UnknownHostException {
        Settings settings = Settings.builder()
                .put("cluster.name", "你的集群名称")
                // 如有x-pack验证可添加下行配置
                .put("xpack.security.user", "用户名:密码")
                .build();
        TransportClient client = new PreBuiltXPackTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("ES节点IP"), 9300));
        return client;
    }

    // 手动注册ElasticsearchTemplate
    @Bean
    public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException {
        return new ElasticsearchTemplate(elasticsearchClient());
    }

    @Bean
    public CustomElasticsearchTemplate customElasticsearchTemplate() throws UnknownHostException {
        return new CustomElasticsearchTemplate(elasticsearchClient());
    }
}

方案二:迁移到RestHighLevelClient实现(官方推荐,长期方案)

直接替换原有ElasticsearchTemplate为ElasticsearchRestTemplate,改动量很小:

  1. 先确保application.yml/properties中配置了Rest客户端的相关参数:
spring.elasticsearch.rest.uris=http://ES节点IP:9200
# 有身份验证可添加下面两行
spring.elasticsearch.rest.username=用户名
spring.elasticsearch.rest.password=密码
  1. 修改CustomCdrElasticConfig类代码:
@Configuration
public class CustomCdrElasticConfig {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @Bean
    public CustomElasticsearchTemplate customElasticsearchTemplate(){
        // 若原有CustomElasticsearchTemplate仅支持TransportClient,需调整构造方法兼容RestHighLevelClient即可
        return new CustomElasticsearchTemplate(restHighLevelClient);
    }
}

注意:ElasticsearchRestTemplate的常用操作API和原有ElasticsearchTemplate基本一致,绝大多数业务代码不需要修改,仅需要调整依赖注入的类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:45:09