SpringBoot+ES报错记录

提取你的报错关键字进行搜索,看是否有对应的。以下仅为本人遇到的问题及解决办法。

报错一、

2024-08-28 16:21:28.294 ERROR [main] org.springframework.boot.SpringApplication.reportFailure: Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'qwsdApi': Unsatisfied dependency expressed through field 'esService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'esService' defined in.xxxx.xxxx.service.EsService defined in @EnableElasticsearchRepositories declared on ElasticsearchRepositoriesRegistrar.EnableElasticsearchRepositoriesConfiguration: Cannot resolve reference to bean 'elasticsearchTemplate' while setting bean property 'elasticsearchOperations'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'elasticsearchTemplate' defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchDataConfiguration$RestClientConfiguration.class]: Unsatisfied dependency expressed through method 'elasticsearchTemplate' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchRestHighLevelClient' defined in class path resource [org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations$RestHighLevelClientConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.RestHighLevelClient]: Factory method 'elasticsearchRestHighLevelClient' threw exception; nested exception is java.lang.NoClassDefFoundError: org/elasticsearch/xcontent/DeprecationHandler
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPos

原因

导入es的maven依赖包与es版本不兼容

情景描述

springboot版本为:2.6.13,ES版本为7.16.2,maven参考网络仅引入以下两个依赖,报错。

 <!--引入es-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.16.2</version>
        </dependency>

解决办法

查看es与springboot版本是否合适,然后展开项目树External Libraries查看,是否存在低版本es依赖,经过查看发现存在7.15.2的es依赖。重新引入以下maven依赖,clean后rebuild项目,启动不报错。

Spring BootSpring Data ElasticsearchElasticsearch
2.4.x4.1.x7.9.x
2.5.x4.2.x7.12.x
2.6.x4.3.x7.15.x
2.7.x4.4.x7.17.x
        <!--引入es-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        <!--你的es什么版本,记得修改为什么版本-->
            <version>7.16.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <!--你的es什么版本,记得修改为什么版本-->
            <version>7.16.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>jakarta.json</groupId>
            <artifactId>jakarta.json-api</artifactId>
            <version>2.0.1</version>
        </dependency>

 报错二、

java: 无法访问org.springframework.data.elasticsearch.repository.ElasticsearchRepository
  错误的类文件: /D:/maven/repository/org/springframework/data/spring-data-elasticsearch/5.3.3/spring-data-elasticsearch-5.3.3.jar!/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.class
    类文件具有错误的版本 61.0, 应为 52.0

原因

使用的JDK版本与相关依赖包冲突,可以升级你的JDK版本

情景描述

由于度娘的错误引导,本人引入了更高级的Spring Data Elasticsearch的依赖包,导致编译时报错

解决办法

一、降级依赖包(本人使用方法)

二、升级jdk版本,使用jdk8以上开发包

报错三、

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2024-08-29 08:20:04.236 ERROR [main] org.springframework.boot.SpringApplication.reportFailure: Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rdmsApi': Unsatisfied dependency expressed through field 'esRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'esRepository' defined in com.dytg.materialapi.service.EsRepository defined in @EnableElasticsearchRepositories declared on ElasticsearchRepositoriesRegistrar.EnableElasticsearchRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.dytg.materialapi.service.EsRepository.findEsStandardsByFlagAndTa_noAndSign(java.lang.String,java.lang.String,java.lang.String); Reason: No property 'no' found for type 'String' Traversed path: EsStandard.ta.; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property 'no' found for type 'String' Traversed path: EsStandard.ta. at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.context.support.AbstractApplicationConte

原因

没有匹配到对应的字段,如我这里面就是"no"字段没匹配上

解决办法

 java中驼峰命名可对应ES的下划线,但是最好的办法是使用@Field注解,声明哪个字段对应哪个映射


    @Field(name="ns_no")
    private String nsNo;

报错四、

java.lang.NoSuchFieldError: INDEX_CONTENT_TYPE 

 原因

springboot版本和spring-data-elasticsearch版本不对应

本人一开始的springboot版本为2.6.13,spring-data-elasticsearch版本为4.3.9,理论上对于springboot2.6.13该spring-data-elasticsearch是对的

解决办法:

注意确保以下配置版本一致:

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.14</spring-boot.version>
    </properties>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.7.14-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>

一、升级springboot(本人采用),将springboot更改为2.7.14,重新构建后该包版本为:4.4.14 

1a251dd2f1234d2b9734a74e0d95db41.png

二、更改spring-data-elasticsearch版本

 

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java框架,用于构建独立的、可扩展的、基于微服务的应用程序。它提供了一种快速、简单的方式来构建和部署应用程序,也简化了与各种数据库、消息队列和其他外部系统进行集成的过程。同时,Spring Boot提供了一套强大的开发工具和功能,方便开发人员进行开发、测试和部署。 Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,它被广泛应用于构建实时搜索、数据分析和数据存储的解决方案。Elasticsearch具有高性能、可扩展、可靠和易于使用的特点,可以处理大规模的数据,并提供全文搜索、聚合分析和实时监控等功能。 Oracle是一种关系型数据库管理系统(RDBMS),它是全球领先的企业级数据库解决方案之一。Oracle提供了高度可靠和安全的数据管理功能,同时支持事务处理、并发性控制、数据恢复和备份等重要特性。它还提供了丰富的管理和开发工具,方便开发人员进行数据库的设计、开发和管理。 在使用Spring Boot开发应用程序时,可以通过集成Elasticsearch和Oracle来满足不同的需求。使用Elasticsearch,可以轻松地实现全文搜索、聚合分析和实时监控等功能。而Oracle数据库可以用于存储结构化数据,并提供事务处理、数据完整性和安全性等特性。通过使用这两个技术,可以构建出高效、可靠和安全的应用程序,满足不同场景下的各种需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值