2017-07-11 70 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; 
    } 
} 
相关问题