spring boot mongodb 多数据库

Posted

技术标签:

【中文标题】spring boot mongodb 多数据库【英文标题】:spring boot mongo multiple database 【发布时间】:2018-02-05 13:14:12 【问题描述】:

如何配置 application.properties 以使用多个 mongoTemplate

我当前的配置。

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=user

我的代码:

public class UserRepository


     @Autowired
     private MongoTemplate mongoTemplate;

     public UserInfo getUserInfo()
         //i can get user information from user database
         mongoTemplate.findAll();
     

我想从其他数据库中获取数据,例如通用数据库。例如

public class UserRepository


    @Autowired
    private MongoTemplate mongoUserTemplate;

    @Autowired
    private MongoTemplate mongoCommonTemplate;

    public UserInfo getUserInfo()
        //i can get user information from user database
        mongoUserTemplate.findAll();

        //how can i configure application.properties to use 
        //mongoCommonTemplate...
        mongoCommonTemplate.findAll();
    

【问题讨论】:

【参考方案1】:

有一个 Qualifier 注释,您可以使用它来为要使用的 bean 提供名称。

因此,当您创建 MongoTemplate 对象时,请给它们不同的名称。然后在你想使用不同版本的地方添加一个限定符注解,提供你想要的 bean 的名称。

例如:

配置类:

@Configuration
public class AppConfig 

  public @Bean Mongo mongo() throws Exception 
      return new Mongo("localhost");
  

  public @Bean MongoTemplate userTemplate() throws Exception 
      return new MongoTemplate(mongo(), "user");
  
  public @Bean MongoTemplate commonTemplate() throws Exception 
      return new MongoTemplate(mongo(), "common");
  

要自动装配模板的类:

@Autowired
@Qualifier("userTemplate")
private MongoTemplate userTemplate;
@Autowired
@Qualifier("commonTemplate")
private MongoTemplate commonTemplate;

**如果 bean 的名称与您自动装配到的字段的名称相匹配,那么我认为您甚至可以不使用 Qualifier 注释。 IE。如果您在配置类中调用 bean userTemplate,则可以将其自动装配到一个名为 userTemplate 的字段中,而无需 @Qualifier 注释

【讨论】:

以上是关于spring boot mongodb 多数据库的主要内容,如果未能解决你的问题,请参考以下文章

开源 Spring Boot 中 Mongodb 多数据源扩展框架

spring-boot整合mongodb多数据源的案例

Spring Boot项目中的MongoDB一对多和多对一关系

无法在多文档事务中创建命名空间(MongoDB 4.0、Spring Data 2.1.0、Spring Boot)

Spring boot 工具类静态属性注入及多环境配置

Spring-boot集成pgmongo多数据源