首页 > 基础资料 博客日记

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

2025-01-15 10:30:09基础资料围观47

这篇文章介绍了解决 Spring Boot 启动错误问题:elasticsearch-java 8.17.0 报 elasticsearch-rest-client-7.6.2 异常分析与解决方案,分享给大家做个参考,收藏Java资料网收获更多编程知识

解决 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 命令检查依赖关系,及时发现和解决版本冲突问题,从而避免运行时错误。


文章来源:https://blog.csdn.net/gs80140/article/details/144953717
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云