【问题标题】:configuration Elasticsearch to java SpringBoot Application配置 Elasticsearch 到 java SpringBoot 应用程序
【发布时间】:2020-07-03 14:14:37
【问题描述】:

我正在尝试使用 Jdk 1.8 和弹性搜索 Versi7.6.61 将 Elastic 配置为 SpringBoot 应用程序
和当前春季版本 2.2.5.RELEASE

   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.2.5.RELEASE</version>
   <relativePath/>

//这些是弹性搜索的pom

<dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>${org.elasticsearch}</version>
    </dependency>

    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>${org.elasticsearch}</version>
    </dependency>
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-client-sniffer</artifactId>
      <version>${org.elasticsearch}</version>
    </dependency>
       <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>transport</artifactId>
      <version>${org.elasticsearch}</version>
    </dependency> 

目前,我使用的是最新版本的 Elasticsearch 版本 7.6.1 我得到以下 Java JDK 版本是 1.8 异常

     org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchRestHighLevelClient' defined in class path resource \[org/springframework/boot/autoconfigure/elasticsearch/rest/RestClientConfigurations$RestHighLevelClientConfiguration.class\]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class \[org.elasticsearch.client.RestHighLevelClient\] from ClassLoader \[sun.misc.Launcher$AppClassLoader@18b4aac2\]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:572) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~\[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~\[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~\[spring-boot-2.2.3.RELEASE.jar:2.2.3.RELEASE\]
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) \[spring-boot-2.2.3.RELEASE.jar:2.2.3.RELEASE\]
            at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) \[spring-boot-2.2.3.RELEASE.jar:2.2.3.RELEASE\]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) \[spring-boot-2.2.3.RELEASE.jar:2.2.3.RELEASE\]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) \[spring-boot-2.2.3.RELEASE.jar:2.2.3.RELEASE\]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) \[spring-boot-2.2.3.RELEASE.jar:2.2.3.RELEASE\]
            at io.dz.ReIndexing.main(ReIndexing.java:13) \[classes/:na\]
        Caused by: java.lang.IllegalStateException: Failed to introspect Class \[org.elasticsearch.client.RestHighLevelClient\] from ClassLoader \[sun.misc.Launcher$AppClassLoader@18b4aac2\]
            at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~\[spring-core-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~\[spring-core-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:232) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:210) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:149) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:310) ~\[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1094) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) ~\[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            ... 15 common frames omitted
        Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/client/Cancellable
            at java.lang.Class.getDeclaredMethods0(Native Method) ~\[na:1.8.0_161\]
            at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~\[na:1.8.0_161\]
            at java.lang.Class.getDeclaredMethods(Class.java:1975) ~\[na:1.8.0_161\]
            at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~\[spring-core-5.2.3.RELEASE.jar:5.2.3.RELEASE\]
            ... 22 common frames omitted
        Caused by: java.lang.ClassNotFoundException: org.elasticsearch.client.Cancellable
            at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~\[na:1.8.0_161\]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~\[na:1.8.0_161\]
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~\[na:1.8.0_161\]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~\[na:1.8.0_161\]
            ... 26 common frames omitted


//when I am trying to configure Elastic search I got the Exception class not Found 
thanks in Advance to reply][1]][1]  

【问题讨论】:

  • 你能粘贴你的 pom.xml 中提到你如何在你的项目中添加对 ElasticSearch 的依赖的部分
  • org.elasticsearchelasticsearch${org.elasticsearch}org.elasticsearch.client elasticsearch-rest-high-level-client${org.elasticsearch} org.elasticsearch.clientelasticsearch-rest-client-sniffer${org.elasticsearch}
  • @Purushottam 请将 pom 的内容添加到问题中,以便于阅读
  • @OpsterESNinjaNishant 我添加了弹性搜索依赖项
  • @Purushottam 这个answer 可能会有所帮助。

标签: java spring-boot maven elasticsearch


【解决方案1】:

您在内部添加的高级REST客户端调用低级REST客户端

<dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>${org.elasticsearch}</version>
</dependency>

这个,低级客户端是由核心依赖本身加载的,但它似乎与 7.x 版本不对应(您可以在外部库列表中检查相同的内容)。

在我的系统中添加的elastcsearch-rest-client 是6.4.2 版,而我使用的是7.5.0 版的elastcisearch

因此,在这种情况下,您可以在 pom.xml 中手动添加与 elasticsearch-rest-client 相关的依赖项,方法是:

<dependency>
  <groupId> org.elasticsearch.client </ groupId>
  <artifactId> elasticsearch-rest-client </ artifactId>
  <version>${org.elasticsearch}</ version>
</ dependency>

因此,与弹性搜索依赖项相关的完整 pom.xml 应如下所示:

<dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>${org.elasticsearch}</version>
</dependency>

<dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>${org.elasticsearch}</version>
</dependency>

<dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-client-sniffer</artifactId>
      <version>${org.elasticsearch}</version>
</dependency>

<dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>transport</artifactId>
      <version>${org.elasticsearch}</version>
</dependency>

<dependency>
      <groupId> org.elasticsearch.client </ groupId>
      <artifactId> elasticsearch-rest-client </ artifactId>
      <version>${org.elasticsearch}</ version>
</ dependency>

【讨论】:

  • @Purushottam 如果您的问题得到解决,您能否接受答案。谢谢。
【解决方案2】:

在使用 springboot 和 elasticsearch 时,你需要明确一些传递依赖,因为 SpringBoot 声明了 6.4 版本...

基本上你可以把它放在你的pom.xml:

<properties>
  <elasticsearch.version>7.6.1<elasticsearch.version>
</properties>

在此处查看文档:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-customize-dependency-versions

【讨论】:

    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2020-10-04
    相关资源
    最近更新 更多