所以我试图让我的Spring Boot网络服务与Elasticsearch对话(我有另一个运行的Java应用程序)
我得到的错误是
DependencyException:创建名称为“ searchController”的bean时出错: 通过字段“ searchService”表示不满意的依赖关系;嵌套的 例外是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为'searchService'的bean时出错:不满意的依赖关系 通过字段“ searchRepository”表示;嵌套异常为 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“ searchRepository”的bean:初始化方法的调用 失败嵌套异常为 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信息1925-[[主要] o.apache.catalina.core.StandardService:正在停止服务[Tomcat]
我的依存关系(等级)是
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>
}
有人知道怎么了吗?
答案 0 :(得分:3)
您使用的Spring Boot版本使用与Elasticsearch 6.4不兼容的Spring Data Elasticsearch版本。
为确保使用兼容版本,请从Elasticsearch依赖项中删除该版本,并允许Spring Boot的依赖项管理来控制该版本。
答案 1 :(得分:1)
对于那些尝试7.0的人,Spring Data Elasticsearch尚不支持它。
有关支持的弹性搜索版本,请参阅以下链接。
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions
替代方法:使用RestHighLevelClient和LowLevelClients进行交互。 JPA的功能将丢失。