首页 > 其他分享 >SpringBoot整合ElasticSearch8.x 踩坑记录

SpringBoot整合ElasticSearch8.x 踩坑记录

时间:2023-04-11 17:57:35浏览次数:43  
标签:java SpringBoot 8.6 client elasticsearch 整合 org com ElasticSearch8

背景

jdk版本 openjdk-17
springboot版本 2.6.11

pom.xml

<!-- ElasticSearch提供的依赖 -->
<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.6.2</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.2</version>
</dependency>

<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>2.1.1</version>
</dependency>

报错语句

java.lang.IllegalStateException: Failed to load ApplicationContext

''''' 中间省略 ''''''

Caused by: java.lang.NoSuchMethodError: 'org.elasticsearch.client.RequestOptions$Builder org.elasticsearch.client.RequestOptions$Builder.removeHeader(java.lang.String)'
	at co.elastic.clients.transport.rest_client.RestClientOptions.addBuiltinHeaders(RestClientOptions.java:170)
	at co.elastic.clients.transport.rest_client.RestClientOptions.<init>(RestClientOptions.java:64)
	at com.noking.search.config.MallElasticSearchConfig.esRestClient(MallElasticSearchConfig.java:34)
	at com.noking.search.config.MallElasticSearchConfig$$EnhancerBySpringCGLIB$$620ce3f7.CGLIB$esRestClient$0(<generated>)
	at com.noking.search.config.MallElasticSearchConfig$$EnhancerBySpringCGLIB$$620ce3f7$$FastClassBySpringCGLIB$$338beeeb.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
	at com.noking.search.config.MallElasticSearchConfig$$EnhancerBySpringCGLIB$$620ce3f7.esRestClient(<generated>)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)

排查过程

ElasticSearch装得是8.6.2版本的,使用Spring整合的时候,发现一直报一个RequestOptions.Builder类中removeHeader方法不存在的错误,查看源码发现,哎我去,真有问题,源码中没有这个方法,看到这,马上想到肯定是我的问题,官方包怎么可能有问题。

然后去排查是不是自己导包的版本有问题,查阅官方文档后,和官方一样,没问题。

随后进一步查看源码,发现elasticsearch-java包中的RestClientTransport类调用了一个名叫elasticsearch-rest-client的包中的方法,而这个包的版本是7.15.2。看到这个版本号,就知道问题肯定出在这。继续排查,得知这个包是由SpringBoot维护的,只需要在pom.xml中显示得引用8.6.2版本来覆盖掉springboot维护的就可以解决问题。

具体代码如下:

RestClientTransport.java

image-20230411174109673

RestClientOptions.java

image-20230411174121524

image-20230411173739844

解决办法

依赖中引入elasticsearch-rest-client:8.6.2覆盖springboot维护的包,最终pom.xml如下:

<!-- ElasticSearch提供的依赖 -->
<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.6.2</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.2</version>
</dependency>

<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>2.1.1</version>
</dependency>

<!-- 覆盖springboot维护的7.x版本 -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>8.6.2</version>
</dependency>

over!

标签:java,SpringBoot,8.6,client,elasticsearch,整合,org,com,ElasticSearch8
From: https://www.cnblogs.com/ergwang/p/17307099.html

相关文章

  • 自定义SpringBoot Starter
    1.Starter加载原理Springboot通过SpringBootApplication注解启动项目,springboot启动的时候,会将项目中所有声明为bean对象的实例加载到IOC容器。除此之外也会将starter里的bean信息加载到ioc容器,从而做到0配置,开箱即用。1.1加载starter:Springboot项目启动时,Springboot通过@Spri......
  • SpringBoot---文件上传
    静态资源访问使用IDEA创建SPringBoot项目,会默认创建出classpath:/static/目录,静态资源一般放在这个目录下即可。如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤策略。在application.properties中直接定义过滤规则和静态资源位置:spring.mvc.stati......
  • Springboot报错:Could not resolve view with name 'index' in servlet with name 'dis
    该异常是因为用定义了带@EnableWebMvc注解的配置类后发生的,在带该注解的配置类中加入下面的代码就可以了:@BeanpublicInternalResourceViewResolverviewResolver(){InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();viewResolver.......
  • SpringBoot线程池和Java线程池的实现原理
    使用默认的线程池方式一:通过@Async注解调用publicclassAsyncTest{@Asyncpublicvoidasync(Stringname)throwsInterruptedException{System.out.println("async"+name+""+Thread.currentThread().getName());Thread.sleep(10......
  • SpringBoot 集成 MybatisPlus 五——ActiveRecord
    1什么是ActiveRecordActiveRecord(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。在ActiveRecord模式中,对象中既有持久存储的数据,也有针对数据的操作,ActiveRecord模式把数据增删改查的逻辑作为对象的一......
  • 整合Mybatis
    步骤:在pom.xml中导入相关jar包,注意版本号junit<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>mybatis<dependency><groupId>org.myb......
  • 动力节点王鹤SpringBoot3笔记——第六章 远程访问@HttpExchange[SpringBoot 3]
    第六章 远程访问@HttpExchange[SpringBoot3]远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是支付最广泛的。SpringBoot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring......
  • spring注解整合mybatis
    引入依赖<!--mybatis-spring与mybatis使用低版本适配--><!--https://mvnrepository.com/artifact/org.mybatis/mybatis-spring--><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version&......
  • SpringBoot处理get请求的路径参数
    当请求方式为get并且使用路径参数的时候,请求格式形如: 后端controller中可以用实体类接收参数,并且不用添加任何注解,当然这个实体类是中的属性是有getter和setter方法的才行,接受方式形如:实体类形如: SpringBoot会自动做处理,将路径参数中的值填充到实体类对应的属性中......
  • XP Android7.0+ 整合包
    下载链接代码如下:点击查看代码adbremountadbpush命令adbpush路径/systemadbshellsucd/systemmount-oremount-w/systemshscript.sh//出现Done表示成功了......