SpringBoot项目整合Elasticsearch启动失败的常见错误总结

❃博主首页 : 「程序员1970」 ,同名公众号「程序员1970」
☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关>


文章目录

    • 一、Bean定义冲突
      • [1. MyBatis与Elasticsearch Repository扫描路径冲突](#1. MyBatis与Elasticsearch Repository扫描路径冲突)
    • 二、依赖配置问题
      • [1. 缺少必要依赖或依赖版本不匹配](#1. 缺少必要依赖或依赖版本不匹配)
    • 三、Elasticsearch服务连接问题
      • [1. Elasticsearch服务未启动或地址配置错误](#1. Elasticsearch服务未启动或地址配置错误)
    • 四、版本兼容性问题
      • [1. Spring Boot与Elasticsearch版本不兼容](#1. Spring Boot与Elasticsearch版本不兼容)
    • 五、Elasticsearch健康检查问题
      • [1. Actuator健康检查失败](#1. Actuator健康检查失败)
    • [六、Netty与Spring Data Elasticsearch冲突](#六、Netty与Spring Data Elasticsearch冲突)
      • [1. Netty与Spring Data Elasticsearch的冲突](#1. Netty与Spring Data Elasticsearch的冲突)
    • 七、配置文件格式错误
      • [1. 配置文件格式错误(YAML缩进问题)](#1. 配置文件格式错误(YAML缩进问题))
    • 八、其他常见问题
      • [1. 字段映射冲突](#1. 字段映射冲突)
      • [2. 查询结果为空](#2. 查询结果为空)
    • 总结

一、Bean定义冲突

1. MyBatis与Elasticsearch Repository扫描路径冲突

报错内容

复制代码
org.springframework.context.annotation.ConflictingBeanDefinitionException: 
Annotation-specified bean name 'articlesRepository' for bean class [com.dragon.springboot3vue3.mapper.ArticlesRepository] conflicts with existing, non-compatible bean definition of same name and class [org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactoryBean]

原因

  • @MapperScan (MyBatis注解) 和 @EnableElasticsearchRepositories (Spring Data注解) 扫描了相同的包路径

解决方案

  1. 分离包路径(推荐):
java 复制代码
@SpringBootApplication
@MapperScan("com.example.mapper") // MyBatis Mapper
@EnableElasticsearchRepositories("com.example.es.repository") // ES Repository
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 或移除注解,让Spring Boot自动扫描:
java 复制代码
@SpringBootApplication
// 注释掉以下两行
// @MapperScan("com.example.mapper")
// @EnableElasticsearchRepositories("com.example.es.repository")
public class Application {
    // ...
}

二、依赖配置问题

1. 缺少必要依赖或依赖版本不匹配

报错内容

复制代码
NoSuchBeanDefinitionException: No bean named 'elasticsearchTemplate' available

原因

  • 未正确引入Spring Data Elasticsearch依赖
  • 依赖版本与Spring Boot不兼容

解决方案

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <!-- 排除可能导致冲突的 Netty 依赖 -->
    <exclusions>
        <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </exclusion>
    </exclusions>
</dependency>

三、Elasticsearch服务连接问题

1. Elasticsearch服务未启动或地址配置错误

报错内容

复制代码
org.elasticsearch.client.ResponseException: method [GET], host [http://localhost:9200], URI [/_cluster/health/], status line [HTTP/1.1 404 Not Found]
Not Found

原因

  • Elasticsearch服务未启动
  • 配置的地址与实际Elasticsearch地址不匹配(如配置了localhost但实际在其他主机)

解决方案

yaml 复制代码
spring:
  elasticsearch:
    rest:
      uris: http://your-elasticsearch-server:9200 # 替换为实际地址

四、版本兼容性问题

1. Spring Boot与Elasticsearch版本不兼容

报错内容

复制代码
Factory method 'highLevelClient' threw exception
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.RestHighLevelClient]: 
Factory method 'highLevelClient' threw exception

原因

  • Spring Boot版本与Elasticsearch客户端版本不兼容
  • 依赖冲突(如Spring Boot 2.0.3默认依赖Elasticsearch 5.6.10,但项目中使用了7.5.2版本)

解决方案

  1. 确保Spring Boot与Elasticsearch版本兼容
  2. 显式排除默认版本并指定正确版本:
xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.5.2</version>
</dependency>

五、Elasticsearch健康检查问题

1. Actuator健康检查失败

报错内容

复制代码
ElasticsearchHealthCheck failed

原因

  • Spring Boot Actuator默认使用http://localhost:9200进行健康检查
  • Elasticsearch部署在非localhost地址

解决方案

  1. 关闭Elasticsearch健康检查(推荐):
yaml 复制代码
management:
  health:
    elasticsearch:
      enabled: false
  1. 配置正确的Elasticsearch地址:
yaml 复制代码
spring:
  elasticsearch:
    rest:
      uris: http://your-elasticsearch-server:9200

六、Netty与Spring Data Elasticsearch冲突

1. Netty与Spring Data Elasticsearch的冲突

报错内容

复制代码
availableProcessors is already set to [8], rejecting [8]

原因

  • Spring Data Elasticsearch与Webflux组件(基于Netty)发生冲突

解决方案

java 复制代码
@Configuration
public class EsConfig {
    @PostConstruct
    void init() {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }
}

七、配置文件格式错误

1. 配置文件格式错误(YAML缩进问题)

报错内容

复制代码
Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'elasticsearchRestClient' defined in class path resource 
[org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchRestClientAutoConfiguration.class]: 
Cannot create a ElasticsearchRestClient for the given configuration.

原因

  • YAML文件缩进不正确或拼写错误

解决方案

确保配置正确:

yaml 复制代码
spring:
  elasticsearch:
    rest:
      uris: http://localhost:9200

八、其他常见问题

1. 字段映射冲突

报错内容

复制代码
ElasticsearchStatusException: MapperParsingException[failed to parse]

原因

  • 实体类字段类型与ES索引中已有字段类型不一致

解决方案

  1. 删除旧索引(或重建)后重新启动应用
  2. 或通过_reindex API迁移数据

2. 查询结果为空

报错内容

复制代码
No documents found for query

原因

  • 分词器不匹配(如中文未使用IK分词器)
  • 查询条件错误

解决方案

  1. 通过Kibana检查索引映射:GET your_index/_mapping
  2. 确认分词器配置
  3. 打印生成的DSL查询语句验证条件

总结

  1. 确保Elasticsearch服务已启动 :使用curl http://localhost:9200验证
  2. 正确配置连接地址 :在application.yml中设置spring.elasticsearch.rest.uris
  3. 处理依赖冲突:排除Netty依赖,确保版本兼容
  4. 分离包路径:避免MyBatis和Elasticsearch Repository扫描冲突
  5. 关闭健康检查 :如果不需要,设置management.health.elasticsearch.enabled=false
  6. 处理Netty冲突 :添加EsConfig配置类
  7. 检查配置格式:确保YAML缩进正确,无拼写错误

关注公众号获取更多技术干货 !

相关推荐
持续进阶的开发者2 小时前
工作中常用Elasticsearch命令汇总
大数据·elasticsearch·搜索引擎
霸道流氓气质3 小时前
SpringBoot中集成LangChain4j+阿里百炼平台实现AI对话记忆功能、对话隔离、对话持久化到Redis功能
人工智能·spring boot·redis
杰克尼3 小时前
天机学堂项目总结(day1~day2)
大数据·jvm·spring·elasticsearch·搜索引擎·spring cloud·mybatis
人道领域4 小时前
【黑马点评日记02】Redis缓存优化:商户查询性能提升百倍
java·spring boot·spring·servlet·tomcat·intellij-idea
SL-staff5 小时前
2026企业文档选型白皮书:功能、技术栈、私有化部署与采购建议
spring cloud·docker·微服务·kubernetes·开源·私有化部署·企业文档
四斤年华5 小时前
关于SpringBoot在MultipartFile上java.nio.file.NoSuchFileException: /tmp/undertow
java·spring boot·nio
希望永不加班5 小时前
SpringBoot 中 AOP 实现接口限流
java·spring boot·后端·spring
Devin~Y5 小时前
互联网大厂Java面试:Spring Boot/Redis/Kafka/K8s 可观测 + RAG(向量检索/Agent)三轮追问实录
java·spring boot·redis·kafka·kubernetes·spring mvc·webflux
慕容卡卡5 小时前
SpringAI的那些事儿
java·人工智能·spring boot