java - spring boot 2 与 elasticsearch 2.4 通过 spring data

标签 java spring spring-boot elasticsearch

我有一个 spring boot 1.5.9 应用程序,它使用 spring-data-elasticsearch (2.1.3) 连接到 elasticsearch 2.4.0 实例。现在我需要将 spring boot 升级到版本 2,以使其能够使用新的依赖项。

如果我使用最新的 spring boot 版本(2.1.0),它会附带 spring-data-elasticsearch 3.1.2,它使用 elasticsearch 6.4.2。但根据https://github.com/spring-projects/spring-data-elasticsearch我应该使用 spring-data-elasticsearch 2.1.x,所以我指定的版本如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.1.0.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-elasticsearch</artifactId>
  <version>2.1.3.RELEASE</version>
  <exclusions>
    <exclusion>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch</artifactId>
  <version>2.4.6</version>
</dependency>

但是现在我收到以下错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'partSearchRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
... 42 more
Caused by: java.lang.AbstractMethodError
at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:537)
at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:515)
at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:750)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:248)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:191)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:85)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$4(RepositoryFactoryBeanSupport.java:295)
at java.util.Optional.ifPresent(Optional.java:159)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:295)
at org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactoryBean.afterPropertiesSet(ElasticsearchRepositoryFactoryBean.java:67)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741)
... 52 more

其中partSearchRepository 定义为:

public interface PartSearchRepository extends ElasticsearchRepository<Part, Long> {
}

据此我了解到 spring-data-elasticsearch (请参阅ElasticsearchRepositoryFactoryBean.afterPropertiesSet())与较新的 spring-data-commons 不能很好地配合。

有没有办法将 spring boot 2 与 elasticsearch 2.4 一起使用?

最佳答案

Spring Boot 2.1,需要 Spring 5.1 。您使用的 Spring Data ElasticSearch 版本绑定(bind)到 Spring 4,因此这不起作用。

简短的回答是:不,你不能。

关于java - spring boot 2 与 elasticsearch 2.4 通过 spring data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557245/

相关文章:

java - 是否要求在提交结束时发送 jms 消息?

java - 在 Java 中总结两个巨大的长

java - GWT 异步调用总是失败

java - 从基于 REST 的 Spring Controller 返回 "Resource"是否有意义?

java - Spring Data JPA - 命名查询忽略空参数

java - 迁移到新 Roo 版本的问题

java - AspectJ + @Configurable

java - InternalViewResolver 在 Spring 中不工作

mongodb - 带有 spring 引导的 AWS DocumentDB 失败错误 : No server chosen by com. mongodb.client.internal.MongoClientDelegate

java - 是否可以在没有实体的情况下使用 JpaRepository?