SpringBoot-Mongodb双数据源配置

好久没写日志了。主要也是没遇到啥想记录的。

这次想配置一个双数据源。 看了一圈百度。 看了一圈官方文档。 介绍也不全面。

磕磕绊绊。参考很多博客。以及看了看源码才弄了好。

秉承着前人摘树后人乘凉的原则。。。。算了 不比比了

直接贴代码。 一共就2步。直接搞定。 

帮助到你记得点个赞哦

步骤一:配置文件 

  data:
    mongodb:
      master:
        host: 127.0.0.1
        port: 27017
        username: username
        password: pd
        database: db
      tx:
        host: 127.0.0.2
        port: 27017
        username: username
        password: pd
        database: db

 步骤二:设置配置类,这里需要注意一下。 自己的模式。我的第二个数据源是副本集模式。 如果是集群模式的话 换一下枚举即可

package com.fp.pileorder.config;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.connection.ClusterConnectionMode;
import com.mongodb.connection.ClusterType;
import org.springframework.beans.factory.annotation.Qualifier;
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.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;

@Configuration
public class MongodbConfiguration {

  @Primary
  @Bean(name = "mongoMasterProperties")
  @ConfigurationProperties(prefix = "spring.data.mongodb.master")
  public MongoProperties mongoMasterProperties () {
    return new MongoProperties();
  }

  @Bean(name = "mongoTxProperties")
  @ConfigurationProperties(prefix = "spring.data.mongodb.tx")
  public MongoProperties mongoTxProperties () {
    return new MongoProperties();
  }

  @Primary
  @Bean("mongoTemplate")
  public MongoTemplate mongoMasterTemplate (@Qualifier("mongoMasterProperties") MongoProperties mongoProperties) {
    return new MongoTemplate(mongoDbFactory(mongoProperties, false));
  }

  @Bean("mongoTxTemplate")
  public MongoTemplate mongoTxTemplate (@Qualifier("mongoTxProperties") MongoProperties mongoProperties) {
    String host = mongoProperties.getHost();
    String[] split = host.split(",");
    return new MongoTemplate(mongoDbFactory(mongoProperties, split.length > 1 ? true : false));
  }

  public MongoDbFactory mongoDbFactory (MongoProperties mongoProperties, boolean isCluster) {
    ClusterConnectionMode clusterConnectionMode;
    ClusterType clusterType;
    List serverAddressList = new ArrayList<>();
    //是否是集群模式
    if (isCluster) {
      clusterConnectionMode = ClusterConnectionMode.MULTIPLE;
      clusterType = ClusterType.REPLICA_SET;
      String host = mongoProperties.getHost();
      String[] split = host.split(",");
      for (String urlHost : split) {
        serverAddressList.add(new ServerAddress(urlHost, mongoProperties.getPort()));
      }
    } else {
      clusterConnectionMode = ClusterConnectionMode.SINGLE;
      clusterType = ClusterType.STANDALONE;
      ServerAddress serverAddress = new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort());
      serverAddressList.add(serverAddress);
    }
    MongoCredential credential = MongoCredential.createCredential(mongoProperties.getUsername(), mongoProperties.getDatabase(),
        mongoProperties.getPassword());
    MongoClientSettings setting = MongoClientSettings.builder()
        .credential(credential)
        .applyToClusterSettings(builder ->
            builder.hosts(serverAddressList)
                .mode(clusterConnectionMode)
                .requiredClusterType(clusterType)
        ).build();
    MongoClient mongoClient = MongoClients.create(setting);
    return new SimpleMongoClientDbFactory(mongoClient, mongoProperties.getDatabase());
  }


}

步骤三:直接使用 ,想在哪使用 注入进去就行了

  @Resource
  @Qualifier("mongoTemplate")
  private MongoTemplate mongoTemplate;

  @Resource
  @Qualifier("mongoTxTemplate")
  private MongoTemplate mongoTxTemplate;

你可能感兴趣的:(Java,mongodb,spring,boot,数据库)