EnableElasticSearchRepositories exception

2019-08-11 01:03发布

问题:

I am using spring-data-elasticsearch version using 1.3.0.BUILD-SNAPSHOT

The following code was working fine until a few weeks ago. Suddenly it started giving me an exception. I have tried giving basePackages instead of value..

/* We will require this at the point of deployment */
@EnableElasticsearchRepositories(basePackages = "com/rentomoney/rom/server/data/search/repository")
@Configuration
public class ROMElasticSearchConfig {

  ....

}

OR

@EnableElasticsearchRepositories( "com.rentomoney.rom.server.data.search.repository")
@Configuration
public class ROMElasticSearchConfig {
  ....
}

Here is the exception that is being generated:

nested exception is java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories.repositoryBaseClass() at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:261) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:186) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:171) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:144) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:100) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:510) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)

回答1:

The error is a bit cryptic, but it really means that it cannot find the default DefaultRepositoryBaseClass class due to a missing dependency.

Signature for repositoryBaseClass in EnableElasticsearchRepositories annotation:

Class<?> repositoryBaseClass() default DefaultRepositoryBaseClass.class;

If you are using SNAPSHOT versions, you'll need to have the SNAPSHOT repository configured along with any required SNAPSHOT dependencies that the jar doesn't include. Make sure you have the following in your POM file:

Repositories:

<repository>
    <id>spring-snapshot</id>
    <name>Spring Maven SNAPSHOT Repository</name>
    <url>http://repo.springsource.org/libs-snapshot</url>
</repository>

Dependencies:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>1.11.0.BUILD-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>1.3.0.BUILD-SNAPSHOT</version>
</dependency>

That solved the issue for me.



回答2:

First of all its not suggested to use snapshot version unless you are using it for new feature testing. (i.e 1.3.0.BUILD-SNAPSHOT in your case)

The current stable and released version for spring data elasticsearch is

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-elasticsearch</artifactId>
   <version>1.2.0.RELEASE</version>
</dependency>

Second about your question getting error for @EnableElasticsearchRepositories, it could be related to this (DATAES-136) recent commit to the project.

Share some more information / code if problem persist