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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章