現在新版本的驅動的寫法:
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;
}
}