带有弹性搜索的 Spring Boot 导致 java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS

Dev*_*han 10 java spring maven elasticsearch spring-boot

我是弹性搜索的新手。开始使用 Elastic 搜索构建 Spring Boot 应用程序。

使用最新的 ES 版本"elasticsearch-7.7.1"并进行集成,我使用以下 maven 依赖项:

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.7.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

将以下配置添加到我的 Spring Boot 应用程序中:

@Configuration
public class ESConfig {

  @Bean(destroyMethod = "close")
  public RestHighLevelClient client() {
    RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost")));
    return restHighLevelClient;
  }

}
Run Code Online (Sandbox Code Playgroud)

将以下属性添加到 application.yaml

elasticsearch:
  host: localhost
Run Code Online (Sandbox Code Playgroud)

应用程序启动时出现以下异常:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.RestHighLevelClient]: Factory method 'client' threw exception; nested exception is java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
    ... 19 common frames omitted
Caused by: java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS
    at org.elasticsearch.client.RestHighLevelClient.<clinit>(RestHighLevelClient.java:1902)
    at com.sbs.communicationcontrol.search.config.ESConfig.client(ESConfig.java:14)
Run Code Online (Sandbox Code Playgroud)

任何人都可以请帮助为什么会发生此异常?

Dev*_*han 18

经过一些研发,通过添加以下两个依赖项来解决问题:

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

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.7.1</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

  • 这对我使用 spring-boot 2.1.5-RELEASE 和 elastic search 7.9.3 有用。谢谢! (2认同)