spring boot mongo多个数据库

时间:2017-08-28 09:45:23

标签: spring mongodb spring-boot mongotemplate

如何配置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 个答案:

答案 0 :(得分: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注释的情况下离开。即如果您在配置类中调用bean userTemplate,则可以将其自动装入名为userTemplate的字段中,而不使用@Qualifier注释