2017-08-28 49 views
1

我如何配置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对象时,给它们不同的名字。然后在你想使用不同版本的地方添加一个Qualifier注解,提供你想要的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注释的情况下离开。即如果您在config类中调用bean userTemplate,则可以将其自动装入名为userTemplate的字段,而不需要@Qualifier注释