Springboot es包版本异常解决方案

下面是“Springboot es包版本异常解决方案”的完整攻略,包含以下几部分内容:

  1. 问题描述
  2. 解决方案
  3. 示例说明

问题描述

使用 Spring Boot 时,如果要使用 Elasticsearch,一般会使用 Spring Data Elasticsearch(spring-boot-starter-data-elasticsearch),其中包含了 Elasticsearch 的 Java 客户端 TransportClient。但是,在某些情况下,我们会遇到版本不兼容的问题,从而导致无法正常使用 Elasticsearch。

例如,在使用 Spring Boot 2.4.1 和 spring-boot-starter-data-elasticsearch 2.4.1 版本的情况下,可能会遇到以下异常:

java.lang.NoSuchMethodError: org.elasticsearch.client.transport.TransportClient ...`

这个问题的本质是由于 Elasticsearch 6.x 中的 TransportClient 已经被废弃,而 Spring Boot 2.4.x 默认使用了 Elasticsearch 6.x,因此无法正常使用 TransportClient。

解决方案

要解决这个问题,需要使用 Elasticsearch 的 Java 客户端 RestClient,这是 Elasticsearch 7.x 推荐的方式。RestClient 在 Elasticsearch 6.x 和 7.x 中都是可用的,可以保证版本兼容性。

具体来说,可以使用以下的依赖(示例中使用的是 Maven):

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.9.3</version>
</dependency>

除了依赖之外,还需要进行一些配置。可以在 application.yml(或者 application.properties)中添加以下配置:

spring.elasticsearch.rest.uris=localhost:9200

这里的配置是告诉 Spring Boot,Elasticsearch 的地址是 localhost:9200,也可以配置其他的地址。

最后,在使用 Elasticsearch 进行操作的时候,需要使用 RestClient 来构建连接,例如:

@Autowired
private RestHighLevelClient restHighLevelClient;

SearchRequest searchRequest = new SearchRequest("index-name");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchRequest.source(searchSourceBuilder);

SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

示例说明

下面以实际的代码实例来说明如何使用 RestClient 来操作 Elasticsearch。

首先,需要新建一个 Spring Boot 应用,并添加以下依赖(以 Maven 为例):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.9.3</version>
</dependency>

然后,在 application.yml 中添加以下配置:

spring.elasticsearch.rest.uris=localhost:9200

接下来,编写一个简单的控制器来演示如何使用 Elasticsearch:

@RestController
public class TestController {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @GetMapping("/search")
    public String search() throws IOException {
        SearchRequest searchRequest = new SearchRequest("my-index");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        return Arrays.toString(searchResponse.getHits().getHits());
    }
}

这个控制器会查询名为 my-index 的索引中的所有数据,并返回结果。注意,这里的参数 RequestOptions.DEFAULT 是 RequestOptions 提供的默认参数,可以根据实际情况进行修改。

最后,启动应用,访问 http://localhost:8080/search,就可以得到 Elasticsearch 返回的结果了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot es包版本异常解决方案 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Spring Boot超详细讲解请求处理流程机制

    Spring Boot超详细讲解请求处理流程机制 Spring Boot是一个非常流行的Java Web框架,它提供了许多方便的功能,如自动配置、快速开发和易于部署。在开发过程中,我们需要了解Spring Boot的请求处理流程机制,以便更好地理解应用程序的工作原理。本文将详细介绍Spring Boot的请求处理流程机制,并提供两个示例。 请求处理流程机制 …

    Java 2023年5月15日
    00
  • 原来Spring能注入集合和Map的computeIfAbsent是这么好用!

    大家好,我是3y,今天继续来聊我的开源项目austin啊,但实际内容更新不多。这文章主是想吹下水,主要聊聊我在更新项目中学到的小技巧。 今天所说的小技巧可能有很多人都会,但肯定也会有跟我一样之前没用过的。 消息推送平台?推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。 https://gitee.com/zhongfuch…

    Java 2023年5月8日
    00
  • 一天吃透JVM面试八股文

    什么是JVM? JVM,全称Java Virtual Machine(Java虚拟机),是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,…

    Java 2023年4月19日
    00
  • 详解Java中Hibernate的基本原理

    详解Java中Hibernate的基本原理 简介 Hibernate是一种运行在Java平台上的ORM框架,它全面支持SQL查询、持久化、数据缓存等功能,能够方便地连接数据库并操作数据。本文将详细讲解Hibernate的基本原理。 Hibernate的基本原理 Hibernate的三个核心API Hibernate的三个核心API分别是: Configura…

    Java 2023年5月20日
    00
  • springboot 基于Tomcat容器的自启动流程分析

    Spring Boot 基于 Tomcat 容器的自启动流程分析 1. 概述 在 Spring Boot 应用程序中,Tomcat 是一个常用的内嵌式 Web 服务器,它可以很方便地帮助我们创建和启动 Web 应用程序。在本文中,我们将深入探究 Spring Boot 基于 Tomcat 容器的自启动流程。 2. Tomcat 自启动流程 在 Spring …

    Java 2023年6月15日
    00
  • 一篇文章读懂Java哈希与一致性哈希算法

    一篇文章读懂Java哈希与一致性哈希算法 1. 哈希算法基础 在计算机科学中,哈希算法是将任意长度的消息映射到固定长度的摘要 (或称哈希值) 的函数,也就是根据某种规则,将任意数据映射到指定大小范围的数值上,一般用于唯一性标识、数据校验等场景。 Java提供了多种哈希算法,比如MD5、SHA1、SHA256等,这些哈希算法的实现已经被封装在Java的类库中的…

    Java 2023年5月19日
    00
  • java Mail邮件接收工具类

    Java Mail邮件接收工具类 什么是Java Mail邮件接收工具类 Java Mail邮件接收工具类是一个提供接收邮件功能的Java程序类库,可以使用它来编写接收邮件的Java应用程序,通过收取远程邮件服务器上的邮件内容以及邮件信息,实现个人或是企业邮箱的邮件收取功能。 Java Mail邮件接收基本使用流程 Java Mail邮件接收需要经过以下步骤…

    Java 2023年6月15日
    00
  • JDBC连接MySql数据库步骤 以及查询、插入、删除、更新等

    下面是JDBC连接MySql数据库的完整攻略: JDBC连接MySql数据库步骤 导入Mysql JDBC驱动包到项目中,通过Class.forName()方法加载驱动包。 Class.forName("com.mysql.cj.jdbc.Driver") 定义数据库连接信息,包括数据库地址、端口、名称、用户名和密码。 String ur…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部