2017-07-11 47 views
0

我用春天開機運行的MongoDB,並在我的application.properties是spring.data.mongodb.uri=mongodb://username:[email protected]:27017/database1 我補充罐子是 spring-boot-starter-data-mongodb,但現在有在我的MongoDB兩臺數據庫,我怎麼能在我的春天啓動添加其他數據庫,我使用不同的數據庫時如何區分它們?如何在spring引導中使用多個mongodb數據庫?

+0

你可以使用Spring配置文件來看看文檔https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html – Automator1992

回答

0

是的,您可以在單彈簧引導應用程序中配置2個數據庫。 您必須在單個application.yml文件中添加兩個數據庫屬性。

#application.yml 
     spring: 
      data: 
      mongodb: 
       database: database_one 
       uri: mongodb://root:[email protected]:27017/database_one 
    # username : root, Password : root 

     secondary: 
      mongodb: 
      database: database_two 
      uri: mongodb://root:[email protected]:27017/database_two 
    # username : root, Password : password 

然後,您必須爲spring添加兩個數據庫配置文件,並在每個文件中讀取這兩個屬性。對於第一個數據庫配置文件,只需爲主數據庫屬性添加@Primary註釋。 您可以根據您的要求單獨合併這兩個文件。

@Configuration 
public class DatabaseConfiguration { 

    private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseConfiguration.class); 

    @Value("${spring.data.mongodb.uri}") 
    private String mongoUri; 

    @Value("${spring.data.mongodb.database}") 
    private String mongoDbName; 

    @Primary 
    @Bean 
    public MongoTemplate mongoTemplate() {  
     LOGGER.debug(" Instantiating MongoDbFactory "); 
     SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient(), mongoDbName); 
      return new MongoTemplate(mongoDbFactory); 
     } 

    @Primary 
    @Bean 
    public MongoClient mongoClient() { 
     return new MongoClient(mongoClientURI()); 
    } 

    @Primary 
    @Bean 
    public MongoClientURI mongoClientURI() { 
     LOGGER.debug(" creating connection with mongodb with uri [{}] ", mongoUri); 
     return new MongoClientURI(mongoUri); 
    } 

} 


# Second database configuration file. 

@Configuration 
public class SecondaryDatabaseConfiguration { 

    private static final Logger LOGGER = LoggerFactory.getLogger(SecondaryDatabaseConfiguration.class); 

    @Value("${secondary.mongodb.uri}") 
    private String mongoUri; 

    @Value("${secondary.mongodb.database}") 
    private String mongoDbName ; 

    @Bean(name = "mongoTemplateSecond") 
    public MongoTemplate mongoTemplateSecondary() { 
     LOGGER.debug(" Instantiating MongoDbFactory "); 
     SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClientSecondary(), mongoDbName); 
     return new MongoTemplate(mongoDbFactory); 
    } 

    @Bean 
    public MongoClient mongoClientSecondary() { 
     return new MongoClient(mongoClientURISecondary()); 
    } 

    @Bean 
    public MongoClientURI mongoClientURISecondary() { 
     LOGGER.debug(" creating connection with mongodb with uri [{}] ", mongoUri); 
     return new MongoClientURI(mongoUri); 
    } 
} 

然後使用@Qualifier註解的實現類,並通過bean的名字,如果你想從輔助數據庫讀取和主數據庫就可以直接自動裝配。
@Qualifier註解用於區分相同類型的bean。

@Component 
public class RepositoryImpl{ 

    @Qualifier(value = "mongoTemplateSecond") 
    @Autowired 
    MongoTemplate mongoTemplateSecond; // for secondary database 


    @Autowired 
    private MongoTemplate mongoTemplate; // for primary database 


    public List<BasicDBObject> findRecordsInSecondary(Query query){ 
     List<BasicDBObject> basicDBObjects = mongoTemplateSecond.find(query, BasicDBObject.class, YOUR_COLLECTION_NAME); 
     return basicDBObjects; 
    } 


    public List<BasicDBObject> findRecordsInPrimary(Query query){ 
     List<BasicDBObject> basicDBObjects = mongoTemplate.find(query, BasicDBObject.class, YOUR_COLLECTION_NAME); 
     return basicDBObjects; 
    } 
} 
相關問題