2017-08-28 70 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註釋