如果使用多个模块,Spring Data如何知道wicht存储以支持存储库?

Mil*_*ind 1 jpa mongodb spring-data spring-data-jpa

在Spring Data项目中,如果我正在使用多种类型的存储库,即JPA存储库和Mongo存储库,并且如果我要扩展,CrudRepository那么Spring Data如何知道为该存储库选择哪个存储?它可以使用JPA或Mongo。它是基于在每个持久实体上添加的注释@Document还是@Entity

Oli*_*ohm 5

仅由于您的配置设置,才决定存储为Spring Data存储库接口创建的代理的决定。假设您具有以下配置:

@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }
Run Code Online (Sandbox Code Playgroud)

com.acme.foo由于MongoDB和JPA基础结构都检测到包中的接口,因此在某些时候这会爆炸。为了解决这个问题,JavaConfig和XML支持都允许您定义包含和排除过滤器,以便您可以使用命名约定,其他注释等:

@Configuration
@EnableJpaRepositories(basePackages = "com.acme.foo", 
                       includeFilters = @Filter(JpaRepo.class))
@EnableMongoRepositories(base Packages = "com.acme.foo", 
                         includeFilters = @Filter(MongoRepo.class))
class Config { }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这两个注释@JpaRepo@MongoRepo(将由您创建)将用于通过注释相关的存储库接口来有选择地触发检测。

真正的自动检测是不可能的,因为很难仅从存储库接口声明中分辨出您要定位的商店,并且在创建Bean定义的时间点,我们甚至都不知道任何其他基础架构(EntityManager等)。