java - Elasticsearch java 客户端初始化失败

标签 java maven spring-boot elasticsearch

我在尝试运行连接到 elasticsearch 的应用程序时收到此错误消息。

An attempt was made to call the method org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;)V but it does not exist. Its class, org.elasticsearch.client.RestHighLevelClient, is available from the following locations:

jar:file:/path/application/target/application-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/elasticsearch-rest-high-level-client-5.6.3.jar!/org/elasticsearch/client/RestHighLevelClient.class

It was loaded from the following location:

jar:file:/path/application/target/application-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/elasticsearch-rest-high-level-client-5.6.3.jar!/

Action:

Correct the classpath of your application so that it contains a single, compatible version of org.elasticsearch.client.RestHighLevelClient

应用程序构建没有错误,我的 maven 存储库中只存在一个版本的 elasticsearch SDK。

这是我的 pom 的相关部分:

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

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>5.6.3</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId>
        <version>5.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>5.6.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-client</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

这是我在运行应用程序时遇到的异常:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.RestHighLevelClient]: Factory method 'restHighLevelClient' threw exception; nested exception is java.lang.NoSuchMethodError: org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;)V

这就是我初始化 RestHighLevelClient 的方式:

RestClientBuilder builder = RestClient
                .builder(new HttpHost(hostname, port, scheme));
builder.setMaxRetryTimeoutMillis(timeout);
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder.build());

最佳答案

Spring boot 将尝试自动配置 elasticsearch,它将在内部使用 elastic 6 RestHighLevelClient(org.elasticsearch.client.RestClientBuilder builder) 创建弹性客户端。如果您想连接到旧版本的 elasticsearch,请排除 elasticsearch 自动配置。

@EnableAutoConfiguration(exclude={ElasticsearchAutoConfiguration.class, RestClientAutoConfiguration.class})

关于java - Elasticsearch java 客户端初始化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53610891/

相关文章:

java - 使用 Spring Boot 运行脚本时出现 SQL 错误

java - 如何在rest api中使用hashmap返回多值参数

java - 将 Maven 转换为 gradle 后,Spring bootRun 失败并出现神秘错误

java - 内容辅助在 Eclipse 中不起作用

java - mvn jetty :run giving error 404

java - 从 AS400 Cobol ILE 调用 Java 类

java - 如何为两个单词创建唯一键?

security - Maven 3 密码加密是如何工作的?

java - 适用于 Android 的 Xerces

java - 创建 Artifact 叠加