Сбой инициализации Java-клиента Elasticsearch - PullRequest
0 голосов
/ 04 декабря 2018

Я получаю это сообщение об ошибке при попытке запустить приложение, которое подключается кasticsearch.

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 существует только одна версия пакета эластичного поиска.

Это соответствующая часть моего ПОМ:

    <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());

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Spring boot попытается автоматически настроить эластичный поиск, который будет внутренне использовать эластичный 6 RestHighLevelClient (org.elasticsearch.client.RestClientBuilder builder) для создания эластичного клиента.Если вы хотите подключиться к более старой версии эластичного поиска, исключите автоконфигурацию эластичного поиска.

@EnableAutoConfiguration(exclude={ElasticsearchAutoConfiguration.class, RestClientAutoConfiguration.class})
0 голосов
/ 04 декабря 2018

Рассматривая исключение

java.lang.NoSuchMethodError: org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;)

В RestHighLevelClient нет конструктора, который принимает RestClientBuilder в качестве параметра в <version>5.6.3</version>.

Вы пытались использовать версию <version>7.0.0-alpha1</version>?

Обновление:

Исключение An attempt was made to call the method org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder; говорит о том, что код пытается выполнить метод, который относится к версииasticsearch версии 6. В вашем случае, возможно, у вас есть несколько версий библиотек Elasticsearchпредоставляется во время выполнения, или ваш код может соответствовать версии 6, но во время выполнения предоставляется версия 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...