SpringBoot整合MongoDB:动态加载数据库名称,支持加密和不加密,支持集群,MongoDB连接设置

yml文件配置,配置MongoDB地址、用户名、密码、权限、最大连接数、最小连接数,集群则使用逗号分隔

datasource:
  mongodb:
      hostPort: 10.136.38.24:30000
      maxConnections: 100
      minConnections: 20
      username:
      password:
      admin: 

Config类

public abstract class AbstractMongoConfig {
    private String hostPort, username, password,admin;
    private int maxConnections, minConnections;
    public String getHostPort() {
        return hostPort;
    }
    public void setHostPort(String hostPort) {
        this.hostPort = hostPort;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getMaxConnections() {
        return maxConnections;
    }

    public void setMaxConnections(int maxConnections) {
        this.maxConnections = maxConnections;
    }

    public int getMinConnections() {
        return minConnections;
    }

    public void setMinConnections(int minConnections) {
        this.minConnections = minConnections;
    }

    public String getAdmin() {
        return admin;
    }

    public void setAdmin(String admin) {
        this.admin = admin;
    }

    public MongoDbFactory mongoDbFactory(String database) throws Exception {
        List<ServerAddress> seeds = new ArrayList<>();
        String[] hostPorts = hostPort.split(",");
        for(int i = 0 ; i < hostPorts.length;i++){
            String[] hps = hostPorts[i].split(":");
            ServerAddress serverAddress = new ServerAddress(hps[0], Integer.valueOf(hps[1]));
            seeds.add(serverAddress);
        }
        //配置连接数
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.connectionsPerHost(maxConnections);
        builder.minConnectionsPerHost(minConnections);
        MongoClientOptions mongoClientOptions = builder.build();

        if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)){
            return new SimpleMongoDbFactory(new MongoClient(seeds, mongoClientOptions), database);
        }

        List<MongoCredential> mongoCredentialList = new ArrayList<>();

        mongoCredentialList.add(MongoCredential.createCredential(username, admin, password.toCharArray()));

        return new SimpleMongoDbFactory(new MongoClient(seeds, mongoCredentialList, mongoClientOptions), database);
    }
    
    abstract public MongoTemplate getMongoTemplate(String database) throws Exception;
}

MongoDB连接Bean,加载yml文件

@Configuration
@ConfigurationProperties(prefix = "datasource.mongodb")
public class MongoDBDataSourceConfig extends AbstractMongoConfig{

    @Override
    public MongoTemplate getMongoTemplate(String database) throws Exception {
        return new MongoTemplate(mongoDbFactory(database));
    }
}

使用的时候可以把数据库名称作为参数传入,获取mongo连接

@Autowired
	MongoDBDataSourceConfig mongoDBDataSourceConfig;
	MongoTemplate mongoTemplate = mongoDBDataSourceConfig.getMongoTemplate(databaseName);

pom.xml文件添加MongoDB依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值