Spring数据MongoDb和Elasticsearch之间的冲突

时间:2014-11-29 03:54:01

标签: spring-boot spring-data-mongodb spring-data-elasticsearch

我开始了一个项目,我使用Mongo,Elasticsearch和spring boot。

无论使用哪种技术,项目都可以正常运行。然而,两者在一起,他们发生冲突。我看到这篇特别的文章似乎与我的问题相似。 https://jira.spring.io/browse/DATAES-57 所以我试了一下,问题仍然存在。

我把它们放在Main类

@EnableAutoConfiguration(exclude = MongoRepositoriesAutoConfiguration.class)
@EnableMongoRepositories(basePackages = "com.searchizi.mongo.repository")
@EnableElasticsearchRepositories(basePackages = "com.searchizi.elasticsearch.repository")
@ComponentScan
public class Application implements CommandLineRunner { … }

缩略形式的异常跟踪是这个

班级SearchiziUser位于com.searchizi.mongo.model个套餐中。它不在Elasticsearch扫描路径上。

Caused by: java.lang.IllegalArgumentException: Unable to identify index name. SearchiziUser is not a Document. Make sure the document class is annotated with @Document(indexName="foo")
    at org.springframework.util.Assert.isTrue(Assert.java:65)
    at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.getPersistentEntityFor(ElasticsearchTemplate.java:869)
    at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.createIndexIfNotCreated(ElasticsearchTemplate.java:684)
    at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.createIndex(ElasticsearchTemplate.java:135)
    at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.createIndex(AbstractElasticsearchRepository.java:80)
    at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.<init>(AbstractElasticsearchRepository.java:72)
    at org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository.<init>(SimpleElasticsearchRepository.java:36)

每个存储库类型的扫描应该是分开的,但显然不是。知道该怎么办吗?

2 个答案:

答案 0 :(得分:1)

这显然是Spring Data Elasticsearch中的一个错误,因为它似乎扫描了它实际上不应该包的域类型。我为你提交了DATAES-??。此外,我提交了一张票据,以便Spring Data Elasticsearch支持新的多商店配置改进,因此您不必显式配置单独的包。

另外,如果您设置@EnableMongoRepositories,则不需要排除自动配置,因为它会自动禁用Spring Boot的自动配置。

答案 1 :(得分:0)

我遇到了这个例外,我通过更改版本的elasticsearch和mongodb lib版本

解决了这个问题
<!-- Spring data mongodb -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>1.10.0.RELEASE</version>
        </dependency>

        <!-- mongodb java driver -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
        </dependency>

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