有多个数据库时如何在MongoRepository中指定使用mongo数据库

时间:2019-05-07 06:54:10

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

在我的spring boot应用程序中,我已经在yml文件中配置了两个数据库。因此,现在我想指定在每个MongoRepository中使用哪个数据库。这可能吗?如果是这样,该怎么办?提前致谢。

yml文件:

spring:
  data:
mongodb:
first:
  host: 127.0.0.1
  port: 27017
  database: db_admin
      rest:
        base-path: /admin

second:
  host: 127.0.0.1
  port: 27018
  database: `user_forms`
      rest:
        base-path: /users

因此,在用户MongoRepository中,我想使用user_forms数据库。

用户MongoRepository:

  @RepositoryRestResource(collectionResourceRel = "users",path = "users")
  public interface UserRepository extends MongoRepository<User, String> {

  List<User> findByUserId(String id);

}

2 个答案:

答案 0 :(得分:0)

Spring Boot自动配置提供了默认的MongoTemplate,以方便生成MongoDB存储库。

但是,如果要使用多个MongoDB数据库,则需要

  1. 为每个MongoDB数据库注册MongoTemplates
  2. 相应地指定每个MongoTemplates作为MongoRepositories的基础包,以便在生成存储库时通知Spring Data MongoDB使用正确的模板。

例如,假设您注册了2个MongoTemplate,即分别配置为MongoDB的MongoDB和templateUser。然后,您可以使用如下代码来通知Spring Data MongoDB哪些存储库使用哪个模板:

@EnableMongoRepositories(
  basePackages = "com.the.base.package.name.of.admin.repositories",
  mongoTemplateRef = "adminTemplateBeanName")
@Configuration
public class AdminMongoConfig {

  @Bean
  public MongoTemplate adminTemplateBeanName() {
    //...
  }
}

Configure Multiple MongoDB repositories with Spring Data Mongo基本上解释了我所说的所有观点。因此,我的猜测很疯狂,您可能会误以为MongoTemplate与MongoRepository无关,事实并非如此。

答案 1 :(得分:0)

尽管已将问题标记为重复,但仍添加答案,因为MongoRepository是否使用MongoTemplate会引起一些混淆。

当您注入MongoRepository时,它由SimpleMongoRepository类的实例代理。它有一个字段

private final MongoOperations mongoOperations;

MongoOperations是一个接口,MongoTemplate是其实现。

现在,问题是此默认mongo模板在Spring Boot应用程序中来自何处。 看MongoDataAutoConfiguration

@Bean
@ConditionalOnMissingBean
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory,
                                   MongoConverter converter) {
    return new MongoTemplate(mongoDbFactory, converter);
}

因此,我仍然声称它是Configure Multiple MongoDB repositories with Spring Data Mongo

的副本