所以我试图让我的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\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>
}
任何人都知道什么是错的?
您正在使用的Spring Boot版本使用与Elasticsearch 6.4不兼容的Spring Data Elasticsearch版本。
要确保使用兼容版本,请从Elasticsearch依赖项中删除该版本,并允许Spring Boot的依赖关系管理来控制版本。