如何在spring boot中使用多个mongodb数据库?

如何在spring boot中使用多个mongodb数据库?,mongodb,spring-boot,Mongodb,Spring Boot,我使用spring引导来操作mongodb,在我的application.properties中是spring.data.mongodb.uri=mongodb://username:password@主机IP:27017/数据库1 我加上罐子是 spring boot starter data mongodb,但现在我的mongodb中有两个数据库,我如何在spring boot中添加另一个数据库,以及在使用不同的数据库时如何区分它们 是的,您可以在单个spring引导应用程序中配置2个数据库

我使用spring引导来操作mongodb,在我的application.properties中是
spring.data.mongodb.uri=mongodb://username:password@主机IP:27017/数据库1
我加上罐子是
spring boot starter data mongodb
,但现在我的mongodb中有两个数据库,我如何在spring boot中添加另一个数据库,以及在使用不同的数据库时如何区分它们

是的,您可以在单个spring引导应用程序中配置2个数据库。 必须在单个application.yml文件中添加两个数据库属性

#application.yml
        spring:
          data:
            mongodb:
              database: database_one
              uri: mongodb://root:root@172.0.0.1:27017/database_one
    # username : root, Password : root

        secondary:
          mongodb:
            database: database_two
            uri: mongodb://root:password@172.0.0.1: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名称,如果您想从辅助数据库中获取,并且对于主数据库,您可以直接自动连线。
@限定符注释用于区分相同类型的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;
    }
}
@组件
公共类RepositoryImpl{
@限定符(value=“mongoTemplateSecond”)
@自动连线
MongoTemplate mongoTemplateSecond;//用于辅助数据库
@自动连线
私有MongoTemplate MongoTemplate;//用于主数据库
公共列表FindRecordsSecondary(查询){
List basicdbobobjects=mongoTemplateSecond.find(查询,basicdbobobject.class,您的集合名称);
返回基本对象;
}
公共列表findRecordsInPrimary(查询){
List basicdbobobjects=mongoTemplate.find(查询,basicdbobobject.class,您的集合名称);
返回基本对象;
}
}

是的,您可以在单spring引导应用程序中配置2个数据库。 必须在单个application.yml文件中添加两个数据库属性

#application.yml
        spring:
          data:
            mongodb:
              database: database_one
              uri: mongodb://root:root@172.0.0.1:27017/database_one
    # username : root, Password : root

        secondary:
          mongodb:
            database: database_two
            uri: mongodb://root:password@172.0.0.1: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名称,如果您想从辅助数据库中获取,并且对于主数据库,您可以直接自动连线。
@限定符注释用于区分相同类型的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;
    }
}
@组件
公共类RepositoryImpl{
@限定符(value=“mongoTemplateSecond”)
@自动连线
MongoTemplate mongoTemplateSecond;//用于辅助数据库
@自动连线
私有MongoTemplate MongoTemplate;//用于主数据库
公共列表FindRecordsSecondary(查询){
List basicdbobobjects=mongoTemplateSecond.find(查询,basicdbobobject.class,您的集合名称);
返回基本对象;
}
公共列表findRecordsInPrimary(查询){
List basicdbobobjects=mongoTemplate.find(查询,basicdbobobject.class,您的集合名称);
返回基本对象;
}
}

您可以使用spring配置文件查看文档您可以使用spring配置文件查看文档