2017-08-28 5 views
1

複数のmongoTemplateを使用するようにapplication.propertiesを設定するにはどうすればいいですかspring boot mongo multiple databases

私の現在の設定。

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

について、あなたが使用したいBeanの名前を提供するために使用することができますQualifier注釈があります。

したがって、MongoTemplateオブジェクトを作成するときに異なる名前を付けます。次に、異なるバージョンを使用する場所で、必要なBeanの名前を提供する修飾子注釈を追加します。

Configクラス:

@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"); 
    } 
} 

クラステンプレートをautowireたい:例えば

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

** Beanの名前はの名前と一致した場合あなたがそれにオートワイヤリングするフィールドがあれば、Qualifier注釈を使わなくても逃げることができると思います。私。 configクラスのbean userTemplateを呼び出すと、注釈なしでuserTemplateというフィールドに自動配線できます