Mongodb 当存在多个数据库时,如何在MongoRepository中指定using mongo数据库

Mongodb 当存在多个数据库时,如何在MongoRepository中指定using mongo数据库,mongodb,spring-boot,spring-data-mongodb,Mongodb,Spring Boot,Spring Data Mongodb,在SpringBoot应用程序中,我在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:

在SpringBoot应用程序中,我在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
因此,在User MongoRepository中,我想使用
User\u forms
数据库

用户MongoRepository:

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

  List<User> findByUserId(String id);

}
@RepositoryRestResource(collectionResourceRel=“users”,path=“users”)
公共接口UserRepository扩展了MongoRepository{
列表findByUserId(字符串id);
}

Spring Boot auto configuration提供了一个默认的MongoTemplate,以方便生成MongoDB存储库

然而,如果您想使用多MongoDB数据库,则需要

  • 为每个MongoDB数据库注册MongoTemplates
  • 相应地将每个MongoTemplates指定给MongoRepositories的基本包,以便Spring Data MongoDB在生成存储库时被告知使用正确的模板 例如,假设您注册了2个MongoTemplates,即templateAdmin和templateUser,它们被显式配置到它们的MongoDB。然后,您可以使用如下代码通知Spring Data MongoDB哪些存储库使用哪个模板:

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

    基本上解释了我所说的几乎所有观点。因此,我的猜测是,您可能有一个误解,即MongoTemplate与MongoRepository无关,事实并非如此

    Spring Boot auto configuration提供了一个默认的MongoTemplate,以方便生成MongoDB存储库

    然而,如果您想使用多MongoDB数据库,则需要

  • 为每个MongoDB数据库注册MongoTemplates
  • 相应地将每个MongoTemplates指定给MongoRepositories的基本包,以便Spring Data MongoDB在生成存储库时被告知使用正确的模板 例如,假设您注册了2个MongoTemplates,即templateAdmin和templateUser,它们被显式配置到它们的MongoDB。然后,您可以使用如下代码通知Spring Data MongoDB哪些存储库使用哪个模板:

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

    基本上解释了我所说的几乎所有观点。因此,我的猜测是,您可能有一个误解,即MongoTemplate与MongoRepository无关,事实并非如此

    尽管已将问题标记为重复问题,但仍添加答案,因为对于
    MongoRepository
    是否使用
    MongoTemplate
    存在一些混淆

    注入MongoRepository时,它由
    SimpleMongoRepository
    类的实例代理。它有一个领域

    private final MongoOperations mongoOperations;
    
    MongoOperations
    是一个接口,
    MongoTemplate
    是它的实现

    现在的问题是,在Spring引导应用程序中,这个默认mongo模板来自哪里。 查看
    MongoDataAutoConfiguration

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

    因此,我仍然声称它是的副本:

    尽管已将问题标记为副本,但仍添加了一个答案,因为对于
    MongoRepository
    是否使用
    MongoTemplate
    存在一些混淆

    注入MongoRepository时,它由
    SimpleMongoRepository
    类的实例代理。它有一个领域

    private final MongoOperations mongoOperations;
    
    MongoOperations
    是一个接口,
    MongoTemplate
    是它的实现

    现在的问题是,在Spring引导应用程序中,这个默认mongo模板来自哪里。 查看
    MongoDataAutoConfiguration

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

    因此,我仍然声称它是它的副本:

    使用mongoTemplate方法的可能副本,我使用了MongoRepository。因此,它不是使用mongoTemplate方法的可能重复,我使用了MongoRepository。所以它不是复制品