Elasticsearch и Java Spring Boot: java.lang.NoSuchMethodError: - PullRequest
0 голосов
/ 28 октября 2018

Поэтому я пытаюсь заставить мой веб-сервис Spring Boot общаться с Elasticsearch (у меня есть другое приложение Java, которое работает)

Я получаю ошибку

DependencyException: Ошибкасоздание компонента с именем 'searchController': неудовлетворенная зависимость, выраженная через поле 'searchService';вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании компонента с именем 'searchService': неудовлетворительная зависимость, выраженная через поле 'searchRepository';вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем searchRepository: сбой вызова метода init;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: конструктор вызвал исключение;вложенным исключением является java.lang.NoSuchMethodError: org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder.execute () Lorg /asticsearch / action / ListenableActionFuture;2018-10-27 22: 18: 49.139 ИНФОРМАЦИЯ 1925 г. --- [main] o.apache.catalina.core.StandardService: Остановка службы [Tomcat]

Мои зависимости (Gradle)

compile group: 'org.elasticsearch.plugin', name: 'transport-netty4-client', version: '6.4.2'
    compile group: 'org.elasticsearch.client', name: 'transport', version: '6.4.2'
    compile 'org.elasticsearch:elasticsearch:6.4.2'
    compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')

Моя модель

@org.springframework.data.elasticsearch.annotations.Document(indexName = "burf", type = "pages")
data class Result(@Id val handle: String,
                  val url: String,
                  val title: String,
                  val body: String,
                  val meta_description: String?) {

}

Конфиг

@Configuration
@EnableElasticsearchRepositories(basePackages = arrayOf("com.burfdevelopment.skynet.repository\n"))
@ComponentScan(basePackages = arrayOf("com.burfdevelopment.skynet.service"))
class Config {

    @Value("\${elasticsearch.home:/usr/local/Cellar/elasticsearch}")
    private val elasticsearchHome: String? = null

    @Value("\${elasticsearch.cluster.name:skynet}")
    private val clusterName: String? = null

    @Bean
    fun client(): Client {
        val settings = Settings.builder()
                .put("cluster.name", clusterName).build()

        return PreBuiltTransportClient(settings).addTransportAddress(TransportAddress(InetAddress.getByName("192.168.0.100"), 9300))
    }

    @Bean
    fun elasticsearchTemplate(): ElasticsearchOperations {
        return ElasticsearchTemplate(client())
    }
}

Репозиторий

interface SearchRepository : ElasticsearchRepository<Result, String>  {

    fun findByTitle(name: String, pageable: Pageable): Page<Result>
}

Кто-нибудь понял, что не так?

1 Ответ

0 голосов
/ 28 октября 2018

Используемая версия Spring Boot использует версию Spring Data Elasticsearch, которая не совместима с Elasticsearch 6.4.

Чтобы убедиться, что вы используете совместимые версии, удалите версию из зависимостей Elasticsearch ивместо этого разрешите управлению зависимостями Spring Boot управлять версией.

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