2018-01-08粗记

/**
 *
 */

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

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

@Configuration
public class MongoConfig {
	@Value("${mongodb.custom.database}")
    private String database;
	@Value("${mongodb.custom.hosts}")
    private List<String> hosts;
    @Value("${mongodb.custom.hostsandports}")
    private String hostsAndPorts;
	@Value("${mongodb.custom.ports}")
    private List<Integer> ports;
//	@Value("${mongodb.custom.replicaSet}")
    private String replicaSet;
	@Value("${mongodb.custom.username}")
    private String username;
	@Value("${mongodb.custom.password}")
    private String password;
//	@Value("${mongodb.custom.authenticationDatabase}")
    private String authenticationDatabase;
	@Value("${mongodb.custom.minConnectionsPerHost}")
    private Integer minConnectionsPerHost;
	@Value("${mongodb.custom.connectionsPerHost}")
    private Integer connectionsPerHost;
	/**链接超时设定*/
	@Value("${mongodb.custom.connectTimeout}")
    private Integer connectTimeout;
	/**套接字超时时间设定*/
	@Value("${mongodb.custom.socketTimeout}")
    private Integer socketTimeout;
    // 覆盖默认的MongoDbFactory
    @Bean
    MongoDbFactory mongoDbFactory() {
        //客户端配置(连接数、副本集群验证)
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        //设置链接超时时间
        builder.connectTimeout(connectTimeout);
        //套接字超时设定
        builder.socketTimeout(socketTimeout);
        builder.connectionsPerHost(connectionsPerHost);
        builder.minConnectionsPerHost(minConnectionsPerHost);
        if (replicaSet != null && !replicaSet.equals("")) {
            builder.requiredReplicaSetName(replicaSet);
        }
        MongoClientOptions mongoClientOptions = builder.build();

        // MongoDB地址列表
        List<ServerAddress> serverAddresses = new ArrayList<>();
        if(hostsAndPorts != null && hostsAndPorts.length() > 2){
            String[] hostAndPortArray = hostsAndPorts.split(",");
            for(int i = 0 ; i < hostAndPortArray.length ; i ++){
                String hostAndPort = hostAndPortArray[i];
                if(hostAndPort.contains(":")){
                    String host = "";
                    Integer port = 0;
                    String[] temp = hostAndPort.split(":");
                    host = temp[0];
                    if(temp.length > 1 && StringUtils.isNumeric(temp[1])){
                        port = Integer.parseInt(temp[1]);
                    }
                    if(host.length() > 0 && port > 0){
                        ServerAddress serverAddress = new ServerAddress(host,port);
                        serverAddresses.add(serverAddress);
                    }
                }
            }
        }else{
            for (String host : hosts) {
                Integer index = hosts.indexOf(host);
                Integer port = ports.get(index);
                ServerAddress serverAddress = new ServerAddress(host, port);
                serverAddresses.add(serverAddress);
            }
        }

        // 连接认证
        List<MongoCredential> mongoCredentialList = new ArrayList<>();
        if (username != null && !username.equals("")) {
            mongoCredentialList.add(MongoCredential.createScramSha1Credential(
            		username,
                    authenticationDatabase != null ? authenticationDatabase : database,
                    password.toCharArray()));
        }
        //创建客户端和Factory

        MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredentialList, mongoClientOptions);
        MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);
        return mongoDbFactory;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值