Springboot MongoDB多数据源配置

整合MongoDB并配置多数据源可分为4步

目录

增加依赖

编写配置信息

新增配置类

使用


增加依赖

在pom.xml里引入依赖


    org.springframework.boot
    spring-boot-starter-data-mongodb
    2.7.3

编写配置信息

在properties的配置文件中加入MongoDB链接信息

# 第一个数据源
spring.data.mongodb.primary.uri=mongodb://username:password@ip1:port/dbName

# 第二个数据源
spring.data.mongodb.second.uri=mongodb://username:password@ip2:port/dbName

新增配置类

创建一个单独配置类 MongoDBConfiguration

import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;

/**
 * @author ws
 * @version 1.0
 * @date: 2022/9/9 14:58
 * @Description MongoDB多数据源配置
 *
 */
@Configuration
public class MongoDBConfiguration {

    public static final String PRIMARY_TEMPLATE = "primaryMongoTemplate";

    public static final String SECONDARY_TEMPLATE = "secondMongoTemplate";

    /**
     * 第一数据源配置信息
     *
     * @return
     */
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.data.mongodb.primary")
    public MongoProperties primaryMongoProperties() {
        return new MongoProperties();
    }

    /**
     * 第二数据源配置信息
     *
     * @return
     */
    @Bean("secondMongoProperties")
    @ConfigurationProperties(prefix = "spring.data.mongodb.second")
    public MongoProperties secondMongoProperties() {
        return new MongoProperties();
    }

    /**
     * 默认 MongoTemplate
     *
     * @return
     */
    @Bean(name = PRIMARY_TEMPLATE)
    @Primary
    public MongoTemplate primaryMongoTemplate() {
        MongoTemplate mongoTemplate = new     MongoTemplate(primaryMongoFactory(primaryMongoProperties()));
        MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
        mongoMapping.afterPropertiesSet();
        return mongoTemplate;
    }

    @Bean(name = SECONDARY_TEMPLATE)
    public MongoTemplate secondMongoTemplate() {
        MongoTemplate mongoTemplate = new MongoTemplate(secondMongoFactory(secondMongoProperties()));
        MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
        mongoMapping.afterPropertiesSet();
        return mongoTemplate;
    }

    /**
     * 默认 MongoDatabaseFactory
     *
     * @param mongoProperties
     * @return
     */
    @Bean
    @Primary
    public MongoDatabaseFactory primaryMongoFactory(MongoProperties mongoProperties) {
        return new SimpleMongoClientDatabaseFactory(mongoProperties.getUri());
    }

    @Bean
    public MongoDatabaseFactory secondMongoFactory(MongoProperties mongoProperties) {
        return new SimpleMongoClientDatabaseFactory(mongoProperties.getUri());
    }
}

使用

在需要使用模板的时候,可以通过以下方式进行使用

    //获取默认模板(第一个数据源对应的模板)
    @Autowired
    private MongoTemplate mongoTemplate;

    //获取第一个数据源对应的模板
    @Resource(name = MongoDBConfiguration.PRIMARY_TEMPLATE)
    private MongoTemplate firstMongoTemplate;

    //获取第二个数据源对应的模板
    @Resource(name = MongoDBConfiguration.SECONDARY_TEMPLATE)
    private MongoTemplate secondMongoTemplate;

    

你可能感兴趣的:(MongoDB,Springboot,mongodb,spring,boot)