首页 > 编程语言 >解决 Spring Boot 启动错误问题:elasticsearch-java 8.17.0 报 elasticsearch-rest-client-7.6.2 异常分析与解决方案

解决 Spring Boot 启动错误问题:elasticsearch-java 8.17.0 报 elasticsearch-rest-client-7.6.2 异常分析与解决方案

时间:2025-01-07 15:04:54浏览次数:3  
标签:java Spring Boot rest client elasticsearch 版本 org

解决 Spring Boot 启动错误问题:The following method did not exist org.elasticsearch.client.RequestOptions$Builder.setHttpAsyncResponseConsumerFactory 异常分析与解决方案

在使用 Spring Boot 应用时,可能会遇到以下启动错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    co.elastic.clients.transport.rest_client.SafeResponseConsumer.<clinit>(SafeResponseConsumer.java:52)

The following method did not exist:

    org.elasticsearch.client.RequestOptions$Builder.setHttpAsyncResponseConsumerFactory(Lorg/elasticsearch/client/HttpAsyncResponseConsumerFactory;)Lorg/elasticsearch/client/RequestOptions$Builder;

The method's class, org.elasticsearch.client.RequestOptions$Builder, is available from the following locations:

    jar:file:/D:/repo/org/elasticsearch/client/elasticsearch-rest-client/7.6.2/elasticsearch-rest-client-7.6.2.jar!/org/elasticsearch/client/RequestOptions$Builder.class

The class hierarchy was loaded from the following locations:

    org.elasticsearch.client.RequestOptions.Builder: file:/D:/repo/org/elasticsearch/client/elasticsearch-rest-client/7.6.2/elasticsearch-rest-client-7.6.2.jar

Action:

Correct the classpath of your application so that it contains a single, compatible version of org.elasticsearch.client.RequestOptions$Builder

问题分析

该报错的关键点在于 NoSuchMethodError,提示 RequestOptions$Builder 类中的 setHttpAsyncResponseConsumerFactory 方法不存在。这通常是由于应用程序中不同的依赖版本冲突导致的,特别是在使用 Spring Boot 时,可能会受到 spring-boot-dependencies BOM(Bill of Materials)中定义的默认依赖版本影响。

关键问题定位
  1. Spring Boot BOM 的影响 pom.xml 文件中引入了 Spring Boot 的 BOM 管理依赖项:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springboot.version}</version> <!-- 例如:2.3.5.RELEASE -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    Spring Boot 2.3.5.RELEASE 版本中使用了 Elasticsearch 7.x 版本,而该版本的 elasticsearch-rest-client 依赖版本较低,因此会导致应用程序加载过时的方法。

  2. 版本冲突的影响 错误信息显示当前使用的 elasticsearch-rest-client 版本为 7.6.2,而实际调用的方法仅在更高版本(如 8.x 及以上)中存在。因此,需要手动覆盖该版本。

解决方法

方法一:升级 Spring Boot 版本

如果项目允许,可以考虑升级 Spring Boot 版本。例如,将 spring-boot-starter-parent 版本升级到 2.7.x 或更高版本,这样 BOM 会默认使用兼容的 elasticsearch-rest-client 版本。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.12</version> <!-- 新版本 -->
    <relativePath />
</parent>
方法二:手动覆盖 elasticsearch-rest-client 版本

如果无法升级 Spring Boot 版本,可以手动覆盖 elasticsearch-rest-client 的版本,以确保使用最新的 API。

pom.xml 文件中添加以下配置:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>8.17.0</version> <!-- 使用与方法兼容的高版本 -->
        </dependency>
    </dependencies>
</dependencyManagement>
方法三:排除冲突依赖

在某些情况下,还可以通过排除冲突版本来解决问题。例如:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>8.17.0</version>
</dependency>

验证结果

在上述解决方案生效后,重启应用程序,不再出现 NoSuchMethodError 异常,应用可以正常启动。

总结

在 Spring Boot 项目中遇到依赖版本冲突时,可以通过升级 BOM 版本、手动覆盖依赖版本或排除冲突依赖的方式来解决。建议在开发过程中使用 mvn dependency:tree 命令检查依赖关系,及时发现和解决版本冲突问题,从而避免运行时错误。

标签:java,Spring,Boot,rest,client,elasticsearch,版本,org
From: https://blog.csdn.net/gs80140/article/details/144953717

相关文章

  • Java程序基础⑥Java类和对象+封装
    目录1.面向对象的概念2.类的定义和使用2.1类的概念2.2类的定义格式2.3类的实例化3.this引用3.1this引用的意义3.2this的特性4.构造方法4.1构造方法的概念4.2构造方法的性质4.3成员变量初始化4.4构造方法快速创建5.封装5.1封装的概念5.2 封装的......
  • java2实用教程第六版习题答案 第4章
    第4章一.判断题1.√    2.√   3.√    4.× (实例方法不能被类名调用。实例方法可被类创建的任何对象调用,类名调用类方法)  5.√    6.√    7.√   8.√  9.×  (是可以的,只不过成员变量会暂时失效)  10.×(也可以重载)......
  • Spring Task 定时任务
    spring中默认的定时任务第一步:第二步:都是间隔1秒测试规则查看测试一下每隔3秒执行:测试一下1-3:从第一秒开始执行,到第3秒结束执行:测试一下1,2,3:在指定的第1、2、3秒执行: 后面的日、月等不再一一例举......
  • 30 个鲜为人知的 JavaScript 技巧,让你的代码更具可读性
    1、使用!!转换为布尔值使用双重否定快速将任何值转换为布尔值。lettruthyValue=!!1;//trueletfalsyValue=!!0;//false2、默认函数参数设置函数参数的默认值以避免定义错误。functiongreet(name="Guest"){return`Hello,${name}!`;}3、......
  • Javascript实现asp.net mvc的checkbox基本功能
    Html的checkbox使用很广的,它的状态,勾选与非选。 初始状态,默认为非选。你可以设置它是勾选,直在checkbox标签中,添加checked属性。另外,在javascript可以这样,getById('Checkbox_IsPublished').checked=true; 或者,getById('Checkbox_IsPublished').setAttribute('chec......
  • Java io模型
     为了保证操作系统的稳定性和安全性,一个进程的地址空间划分为用户空间(Userspace)和内核空间(Kernelspace)。像我们平常运行的应用程序都是运行在用户空间,只有内核空间才能进行系统态级别的资源有关的操作,比如文件管理、进程通信、内存管理等等。也就是说,我们想要进行......
  • java校园导航系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着现代教育的发展和校园规模的不断扩大,校园内的建筑、设施等日益复杂多样。校园导航系统成为提升校园管理效率和优化用户体验的重要工具。目前......
  • java户籍信息管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着社会的不断发展和城市化进程的加速,人口流动日益频繁,户籍信息的管理面临着诸多挑战。传统的户籍信息管理方式多依赖人工操作,存在效率低下、信......
  • java租赁管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着租赁市场的不断发展,传统的租赁管理方式面临着诸多挑战。传统方式往往依赖大量的纸质文档和人工操作,这在房源信息管理、租客信息处理以及租赁......
  • java攀枝花学院新冠疫情查询与管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着新冠疫情的爆发,全球范围内的公共卫生安全面临着巨大挑战。攀枝花学院作为一个人员密集的教育场所,疫情防控工作更是重中之重。在疫情期间,需要......