简体   繁体   English

通过弹簧数据使用Elasticsearch 2.4的弹簧靴2

[英]spring boot 2 with elasticsearch 2.4 via spring data

I have a spring boot 1.5.9 application that connects to an elasticsearch 2.4.0 instance using spring-data-elasticsearch (2.1.3). 我有一个spring boot 1.5.9应用程序,该应用程序使用spring-data-elasticsearch(2.1.3)连接到elasticsearch 2.4.0实例。 Now I need to upgrade spring boot to version 2 to make it work with a new dependency. 现在,我需要将spring boot升级到版本2,以使其与新的依赖项一起工作。

If I take the latest spring boot version (2.1.0), it comes with spring-data-elasticsearch 3.1.2 which uses elasticsearch 6.4.2. 如果我使用最新的spring boot版本(2.1.0),它将随附有使用elasticsearch 6.4.2的spring-data-elasticsearch 3.1.2。 But according to https://github.com/spring-projects/spring-data-elasticsearch I should use spring-data-elasticsearch 2.1.x so I specified the versions as follows: 但是根据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>

But now I get the following error 但是现在我得到以下错误

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

where the partSearchRepository is defined as: 其中partSearchRepository定义为:

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

From this I gather that spring-data-elasticsearch (see ElasticsearchRepositoryFactoryBean.afterPropertiesSet() ) doesn't work well with the newer spring-data-commons. 由此,我发现spring-data-elasticsearch(请参阅ElasticsearchRepositoryFactoryBean.afterPropertiesSet() )不适用于较新的spring-data-commons。

Is there a way to use spring boot 2 with elasticsearch 2.4 then? 那么,有什么方法可以将spring boot 2与elasticsearch 2.4一起使用吗?

Spring Boot 2.1, requires Spring 5.1 . Spring Boot 2.1需要Spring 5.1。 The Spring Data ElasticSearch version you are using is bound to Spring 4, so that is not going to work. 您使用的Spring Data ElasticSearch版本已绑定到Spring 4,因此无法正常工作。

The short answer thus is no you cannot. 因此,简短的答案是不,你不能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM