Elasticsearch和Java Spring Boot:java.lang.NoSuchMethodError:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch和Java Spring Boot:java.lang.NoSuchMethodError:相关的知识,希望对你有一定的参考价值。
所以我试图让我的Spring Boot Web服务与Elasticsearch交谈(我有另一个可行的Java应用程序)
我得到的错误是
DependencyException:创建名为'searchController'的bean时出错:通过字段'searchService'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'searchService'的bean时出错:通过字段'searchRepository'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'searchRepository'的bean时出错: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 / elasticsearch / action / ListenableActionFuture; 2018-10-27 22:18:49.139 INFO 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
"))
@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>
}
任何人都知道什么是错的?
您正在使用的Spring Boot版本使用与Elasticsearch 6.4不兼容的Spring Data Elasticsearch版本。
要确保使用兼容版本,请从Elasticsearch依赖项中删除该版本,并允许Spring Boot的依赖关系管理来控制版本。
以上是关于Elasticsearch和Java Spring Boot:java.lang.NoSuchMethodError:的主要内容,如果未能解决你的问题,请参考以下文章
JAVA spring (JPA) 中的PostgreSQL + Elasticsearch 同步
ElasticSearch 7.3 结合Spring boot进行增删改查和批量(bulk)详解
通过 Java/Spring Boot 连接到 Docker Elasticsearch 实例