【Mongo】spring-data-mongodb3.1.3配置多数据源

1.项目框架介绍:springboot集成spring-data-mongodb3.1.3 (内嵌mongo-driver-core4.1.1)

2.配置文件:application.yml

mongodb:
  primary:
    host: 192.168.1.1
    port: 27017
    database: database1
    username: ceshi1
    password: ceshi12345
  secondary:
    host: 192.168.1.2
    port: 27017
    database: database2
    username: cheshi2
    password: cheshi234567

3.引入pom包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <!-- 项目改造的话,只需要新增此包,用于使注解@ConfigurationProperties可用 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

4.代码

MultipleMongoProperties.java
@Component
@Data
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {

    private MongoProperties primary = new MongoProperties();
    private MongoProperties secondary = new MongoProperties();
}
MultipleMongoConfig.java
@Configuration
public class MultipleMongoConfig {

    @Autowired
    private MultipleMongoProperties mongoProperties;

    @Primary
    @Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate primaryMongoTemplate() throws Exception {
        return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
    }

    @Bean
    @Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate secondaryMongoTemplate() throws Exception {
        return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
    }

    @Bean
    @Primary
    public MongoDatabaseFactory primaryFactory(MongoProperties mongo) {
        List<ServerAddress> serverAddressList = new ArrayList<>();
        String[] hosts = mongo.getHost().split(",");
        for(String host:hosts){
            serverAddressList.add(new ServerAddress(host, Integer.valueOf(mongo.getPort())));
        }

        // 连接认证,如果设置了用户名和密码的话
        MongoClientSettings settings = null;
        ConnectionPoolSettings poolSetting=ConnectionPoolSettings.builder().
                maxWaitTime(1500, TimeUnit.MILLISECONDS).build();
        if(StringUtils.isNotBlank(mongo.getUsername())) {
            MongoCredential credential = MongoCredential.createScramSha1Credential(mongo.getUsername(),
                    "admin", mongo.getPassword());
            settings = MongoClientSettings.builder()
                    .credential(credential)
                    .applyToConnectionPoolSettings(builder->builder.applySettings(poolSetting))
                    .applyToClusterSettings(builder -> builder.hosts(serverAddressList)).build();
        }else {
            settings = MongoClientSettings.builder().applyToConnectionPoolSettings(builder->builder.applySettings(poolSetting))
                    .applyToClusterSettings(builder -> builder.hosts(serverAddressList)).build();
        }

        MongoClient mongoClient = MongoClients.create(settings);

        // 创建MongoDbFactory
        SimpleMongoClientDbFactory factory = new SimpleMongoClientDbFactory(mongoClient,
                mongo.getDatabase());


        return factory;
    }

    @Bean
    public MongoDatabaseFactory secondaryFactory(MongoProperties mongo) {
        List<ServerAddress> serverAddressList = new ArrayList<>();
        String[] hosts = mongo.getHost().split(",");
        for(String host:hosts){
            serverAddressList.add(new ServerAddress(host, Integer.valueOf(mongo.getPort())));
        }
        // 连接认证,如果设置了用户名和密码的话
        MongoClientSettings settings = null;
        ConnectionPoolSettings poolSetting=ConnectionPoolSettings.builder().
                maxWaitTime(1500, TimeUnit.MILLISECONDS).build();
        if(StringUtils.isNotBlank(mongo.getUsername())) {
            MongoCredential credential = MongoCredential.createScramSha1Credential(mongo.getUsername(),
                    "admin", mongo.getPassword());
            settings = MongoClientSettings.builder()
                    .credential(credential)
                    .applyToConnectionPoolSettings(builder->builder.applySettings(poolSetting))
                    .applyToClusterSettings(builder -> builder.hosts(serverAddressList)).build();
        }else {
            settings = MongoClientSettings.builder().applyToConnectionPoolSettings(builder->builder.applySettings(poolSetting))
                    .applyToClusterSettings(builder -> builder.hosts(serverAddressList)).build();
        }

        MongoClient mongoClient = MongoClients.create(settings);
        // 创建MongoDbFactory
        SimpleMongoClientDbFactory factory = new SimpleMongoClientDbFactory(mongoClient,
                mongo.getDatabase());


        return factory;
    }

}

4.调用

@Resource(name="primaryMongoTemplate")
private MongoTemplate primaryMongoTemplate;


@Resource(name="secondaryMongoTemplate")
private MongoTemplate secondaryMongoTemplate;



datas = (List<Class<?>>) this.primaryMongoTemplate.find(query, entityClass);
long count =  this.secondaryMongoTemplate.count(query, entityClass);

附:代码下载地址:mongoconfig.zip-Java文档类资源-CSDN下载spring-data-mongodb3.1.3配置多数据源更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/xiaren_1988/39624250

猜你喜欢

转载自blog.csdn.net/xiaren_1988/article/details/121243751
今日推荐