mongodb初始化mongoTemplate

現在新版本的驅動的寫法:

package com.goroom.example.config;

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.goroom.example.bean.MongoProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@Configuration
public class MongoConfig {

    //自定義的屬性文件
    @Autowired
    private MongoProperties mongoProperties;

    @Bean("mongoTemplate")
    public MongoTemplate getMongoTemplate() {

        MongoCredential credential = MongoCredential.createCredential(mongoProperties.getUserName(),
                                            mongoProperties.getDbName(),
                                            mongoProperties.getPwdEncrypt().toCharArray());
        int socketTime = mongoProperties.getSocketTimeout();
        int maxWaitTime = mongoProperties.getMaxWaitTime();
        int connectTime = mongoProperties.getConnectTimeout();

		//新版本寫法,不用MongoClientOptions了,需要用MongoClientSettings
        MongoClientSettings.Builder  mongoClientBuilder = MongoClientSettings.builder()
                .applyToSslSettings(builderSsl -> builderSsl.enabled(false))    //不用ssl
                .applyToSocketSettings(builderSocket -> builderSocket.connectTimeout(connectTime, TimeUnit.MILLISECONDS).readTimeout(socketTime, TimeUnit.MILLISECONDS))
                .applyToConnectionPoolSettings(builderPool -> builderPool.maxWaitTime(maxWaitTime, TimeUnit.MILLISECONDS))
                //讀的時候,偏好從庫
                .readPreference(ReadPreference.secondaryPreferred())
                .credential(credential);

        
        List<ServerAddress> seeds = new LinkedList<>();
        if (StringUtils.isNotEmpty(mongoProperties.getHostStr())) {
            String[] hostPortArr = mongoProperties.getHostStr().split(",");
            if(hostPortArr.length > 0) {
                for(String hostPort: hostPortArr) {
                    String[] hostAndPort = hostPort.split(":");
                    if(hostAndPort.length == 2) {
                        seeds.add(new ServerAddress(hostAndPort[0], Integer.parseInt(hostAndPort[1])));
                    }
                }
            }
            mongoClientBuilder.applyToClusterSettings( clusterBuilder -> clusterBuilder.hosts(seeds));
        }

        MongoClient client = MongoClients.create(mongoClientBuilder.build());

        MongoTemplate mongoTemplate = new MongoTemplate(client, mongoProperties.getDbName());
        return mongoTemplate;
    }
}

 

舊版本初始化方法:

package com.goroom.example.config;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.goroom.example.bean.MongoProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.util.LinkedList;
import java.util.List;

@Configuration
public class MongoConfig {

    //自定義的屬性文件
    @Autowired
    private MongoProperties mongoProperties;

    @Bean("mongoTemplate")
    public MongoTemplate getMongoTemplate() {

		//添加認證
        MongoCredential credential = MongoCredential.createCredential(mongoProperties.getUserName(),
                                            mongoProperties.getDbName(),
                                            mongoProperties.getPwdEncrypt().toCharArray());
        int socketTime = mongoProperties.getSocketTimeout() ;
        int maxWaitTime = mongoProperties.getMaxWaitTime();
        int connectTime = mongoProperties.getConnectTimeout();
		//配置
        MongoClientOptions options = MongoClientOptions.builder().sslEnabled(false)
                                        .socketTimeout(socketTime).maxWaitTime(maxWaitTime).connectTimeout(connectTime)
                                        .build();

        
		//添加所有的mongo地址
        List<ServerAddress> seeds = new LinkedList<>();
        if (StringUtils.isNotEmpty(mongoProperties.getHostStr())) {
            String[] hostPortArr = mongoProperties.getHostStr().split(",");
            if(hostPortArr.length > 0) {
                for(String hostPort: hostPortArr) {
                    String[] hostAndPort = hostPort.split(":");
                    if(hostAndPort.length == 2) {
                        seeds.add(new ServerAddress(hostAndPort[0], Integer.parseInt(hostAndPort[1])));
                    }
                }
            }
            
        }
		//初始化客戶端
		MongoClient mongoClient = new MongoClient(seeds, credential, options);
        MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, mongoProperties.getDbName());
        return mongoTemplate;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章