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

Elasticsearch Java应用启动失败,请求排查连接异常问题

解决Elasticsearch 8.5与Spring Boot 2.7.1连接ClosedException问题

核心问题原因

Elasticsearch 8.x版本默认启用了HTTPS加密传输和内置用户身份认证,你的客户端配置未适配这两个默认安全设置,导致服务器主动关闭未加密/未认证的连接,抛出ConnectionClosedException。

解决方法

方案一:开发环境临时关闭安全验证(快速测试)

  • 修改Docker启动Elasticsearch的命令,添加以下环境变量:
    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
      -e "discovery.type=single-node" \
      -e "xpack.security.enabled=false" \
      -e "xpack.security.http.ssl.enabled=false" \
      elasticsearch:8.5.0
    
  • 重启现有容器(如果已启动):
    docker stop elasticsearch
    docker rm elasticsearch
    # 执行上面的run命令重新启动容器
    
  • 此时原有客户端配置无需修改,Spring Boot应用即可正常连接HTTP协议的Elasticsearch服务。

方案二:生产环境适配HTTPS与身份认证(推荐)

1. 获取Elasticsearch CA证书

  • 进入运行中的Elasticsearch容器:
    docker exec -it elasticsearch /bin/bash
    
  • 生成CA证书(容器初始化未生成时执行):
    bin/elasticsearch-certutil ca --out config/ca/ca.crt
    
  • 将证书复制到本地Spring Boot项目的src/main/resources目录:
    docker cp elasticsearch:/usr/share/elasticsearch/config/ca/ca.crt ./src/main/resources/
    

2. 获取elastic用户密码

  • 查看容器初始化时生成的默认密码(容器日志包含):
    docker logs elasticsearch | grep "password for the elastic user"
    
  • 或者重置elastic用户密码:
    docker exec -it elasticsearch bin/elasticsearch-reset-password -u elastic
    

3. 修改客户端配置类

更新ElasticsearchClientConfig,添加SSL证书信任和基础认证信息:

@Configuration
@EnableElasticsearchRepositories(basePackages = "io.pratik.elasticsearch.repositories")
@ComponentScan(basePackages = { "io.pratik.elasticsearch" })
public class ElasticsearchClientConfig extends AbstractElasticsearchConfiguration {
   @Override
   @Bean
   public RestHighLevelClient elasticsearchClient() {
      final ClientConfiguration clientConfiguration = ClientConfiguration
            .builder()
            .connectedTo("0.0.0.0:9200")
            .usingSsl(new ClassPathResource("ca.crt")) // 加载本地CA证书
            .withBasicAuth("elastic", "你的elastic用户密码") // 配置账号密码
            .build();
      return RestClients
            .create(clientConfiguration)
            .rest();
   }
}

验证

重启Spring Boot应用,调用ProductRepository的方法测试连接是否正常,此时应不再抛出连接关闭异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:21:53