MongoDB通過代碼傳參的方式動態設置名稱加載數據源

yml文件

datasource:
  mongodb:
      hostPort: 10.130.41.24:30000
      maxConnections: 100
      minConnections: 20
      username:
      password:

Config類

public abstract class AbstractMongoConfig {
    private String hostPort, username, password;
    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 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, database, password.toCharArray()));

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

Bean

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

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

使用的時候就可以手動注入庫名了

@Autowired
	MongoDBDataSourceConfig mongoDBDataSourceConfig;
	MongoTemplate mongoTemplate = mongoDBDataSourceConfig.getMongoTemplate(databaseName);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章