mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-06 13:48:00 +08:00
升级MongoDB
This commit is contained in:
parent
b8bfce490b
commit
11bf574aae
@ -23,7 +23,7 @@
|
|||||||
<tomcat-jdbc.version>10.0.14</tomcat-jdbc.version>
|
<tomcat-jdbc.version>10.0.14</tomcat-jdbc.version>
|
||||||
<druid.version>1.2.8</druid.version>
|
<druid.version>1.2.8</druid.version>
|
||||||
<hikariCP.version>2.4.13</hikariCP.version>
|
<hikariCP.version>2.4.13</hikariCP.version>
|
||||||
<mongo.version>3.12.10</mongo.version>
|
<mongo.version>4.5.0</mongo.version>
|
||||||
<sqlite.version>3.36.0.3</sqlite.version>
|
<sqlite.version>3.36.0.3</sqlite.version>
|
||||||
<!-- 此处固定2.5.x,支持到JDK8 -->
|
<!-- 此处固定2.5.x,支持到JDK8 -->
|
||||||
<hsqldb.version>2.5.2</hsqldb.version>
|
<hsqldb.version>2.5.2</hsqldb.version>
|
||||||
@ -99,18 +99,10 @@
|
|||||||
<!-- MongoDB Java客户端 -->
|
<!-- MongoDB Java客户端 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mongodb</groupId>
|
<groupId>org.mongodb</groupId>
|
||||||
<artifactId>mongo-java-driver</artifactId>
|
<artifactId>mongodb-driver-sync</artifactId>
|
||||||
<version>${mongo.version}</version>
|
<version>${mongo.version}</version>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mongodb</groupId>
|
|
||||||
<artifactId>mongodb-driver-sync</artifactId>
|
|
||||||
<version>4.5.0</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
-->
|
|
||||||
<!-- Redis Java客户端 -->
|
<!-- Redis Java客户端 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>redis.clients</groupId>
|
<groupId>redis.clients</groupId>
|
||||||
|
@ -6,24 +6,28 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import cn.hutool.db.DbRuntimeException;
|
import cn.hutool.db.DbRuntimeException;
|
||||||
import cn.hutool.log.Log;
|
import cn.hutool.log.Log;
|
||||||
import cn.hutool.setting.Setting;
|
import cn.hutool.setting.Setting;
|
||||||
import com.mongodb.MongoClient;
|
import com.mongodb.MongoClientSettings;
|
||||||
import com.mongodb.MongoClientOptions;
|
|
||||||
import com.mongodb.MongoClientOptions.Builder;
|
|
||||||
import com.mongodb.MongoCredential;
|
import com.mongodb.MongoCredential;
|
||||||
|
import com.mongodb.MongoDriverInformation;
|
||||||
import com.mongodb.ServerAddress;
|
import com.mongodb.ServerAddress;
|
||||||
|
import com.mongodb.client.MongoClient;
|
||||||
import com.mongodb.client.MongoCollection;
|
import com.mongodb.client.MongoCollection;
|
||||||
import com.mongodb.client.MongoDatabase;
|
import com.mongodb.client.MongoDatabase;
|
||||||
|
import com.mongodb.client.internal.MongoClientImpl;
|
||||||
|
import com.mongodb.connection.ConnectionPoolSettings;
|
||||||
|
import com.mongodb.connection.SocketSettings;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MongoDB工具类
|
* MongoDB工具类
|
||||||
*
|
*
|
||||||
* @author xiaoleilu
|
* @author xiaoleilu
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class MongoDS implements Closeable {
|
public class MongoDS implements Closeable {
|
||||||
private final static Log log = Log.get();
|
private final static Log log = Log.get();
|
||||||
@ -146,11 +150,11 @@ public class MongoDS implements Closeable {
|
|||||||
|
|
||||||
final MongoCredential credentail = createCredentail(group);
|
final MongoCredential credentail = createCredentail(group);
|
||||||
try {
|
try {
|
||||||
if (null == credentail) {
|
MongoClientSettings.Builder clusterSettingsBuilder = MongoClientSettings.builder().applyToClusterSettings(b -> b.hosts(Collections.singletonList(serverAddress)));
|
||||||
mongo = new MongoClient(serverAddress, buildMongoClientOptions(group));
|
if (null != credentail) {
|
||||||
} else {
|
clusterSettingsBuilder.credential(credentail);
|
||||||
mongo = new MongoClient(serverAddress, credentail, buildMongoClientOptions(group));
|
|
||||||
}
|
}
|
||||||
|
mongo = new MongoClientImpl(clusterSettingsBuilder.build(), MongoDriverInformation.builder().build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new DbRuntimeException(StrUtil.format("Init MongoDB pool with connection to [{}] error!", serverAddress), e);
|
throw new DbRuntimeException(StrUtil.format("Init MongoDB pool with connection to [{}] error!", serverAddress), e);
|
||||||
}
|
}
|
||||||
@ -192,11 +196,11 @@ public class MongoDS implements Closeable {
|
|||||||
|
|
||||||
final MongoCredential credentail = createCredentail(StrUtil.EMPTY);
|
final MongoCredential credentail = createCredentail(StrUtil.EMPTY);
|
||||||
try {
|
try {
|
||||||
if (null == credentail) {
|
MongoClientSettings.Builder clusterSettingsBuilder = MongoClientSettings.builder().applyToClusterSettings(b -> b.hosts(addrList));
|
||||||
mongo = new MongoClient(addrList, buildMongoClientOptions(StrUtil.EMPTY));
|
if (null != credentail) {
|
||||||
} else {
|
clusterSettingsBuilder.credential(credentail);
|
||||||
mongo = new MongoClient(addrList, credentail, buildMongoClientOptions(StrUtil.EMPTY));
|
|
||||||
}
|
}
|
||||||
|
mongo = new MongoClientImpl(clusterSettingsBuilder.build(), MongoDriverInformation.builder().build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e, "Init MongoDB connection error!");
|
log.error(e, "Init MongoDB connection error!");
|
||||||
return;
|
return;
|
||||||
@ -248,6 +252,7 @@ public class MongoDS implements Closeable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------- Private method start
|
// --------------------------------------------------------------------------- Private method start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建ServerAddress对象,会读取配置文件中的相关信息
|
* 创建ServerAddress对象,会读取配置文件中的相关信息
|
||||||
*
|
*
|
||||||
@ -322,8 +327,8 @@ public class MongoDS implements Closeable {
|
|||||||
* @param group 分组,当分组对应的选项不存在时会读取根选项,如果也不存在使用默认值
|
* @param group 分组,当分组对应的选项不存在时会读取根选项,如果也不存在使用默认值
|
||||||
* @return MongoClientOptions
|
* @return MongoClientOptions
|
||||||
*/
|
*/
|
||||||
private MongoClientOptions buildMongoClientOptions(String group) {
|
private MongoClientSettings buildMongoClientOptions(String group) {
|
||||||
return buildMongoClientOptions(MongoClientOptions.builder(), group).build();
|
return buildMongoClientOptions(MongoClientSettings.builder(), group).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -332,7 +337,7 @@ public class MongoDS implements Closeable {
|
|||||||
* @param group 分组,当分组对应的选项不存在时会读取根选项,如果也不存在使用默认值
|
* @param group 分组,当分组对应的选项不存在时会读取根选项,如果也不存在使用默认值
|
||||||
* @return Builder
|
* @return Builder
|
||||||
*/
|
*/
|
||||||
private Builder buildMongoClientOptions(Builder builder, String group) {
|
private MongoClientSettings.Builder buildMongoClientOptions(MongoClientSettings.Builder builder, String group) {
|
||||||
if (setting == null) {
|
if (setting == null) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
@ -348,8 +353,9 @@ public class MongoDS implements Closeable {
|
|||||||
if (StrUtil.isBlank(group) == false && connectionsPerHost == null) {
|
if (StrUtil.isBlank(group) == false && connectionsPerHost == null) {
|
||||||
connectionsPerHost = setting.getInt("connectionsPerHost");
|
connectionsPerHost = setting.getInt("connectionsPerHost");
|
||||||
}
|
}
|
||||||
|
ConnectionPoolSettings.Builder connectionPoolSettingsBuilder = ConnectionPoolSettings.builder();
|
||||||
if (connectionsPerHost != null) {
|
if (connectionsPerHost != null) {
|
||||||
builder.connectionsPerHost(connectionsPerHost);
|
connectionPoolSettingsBuilder.maxConnecting(connectionsPerHost);
|
||||||
log.debug("MongoDB connectionsPerHost: {}", connectionsPerHost);
|
log.debug("MongoDB connectionsPerHost: {}", connectionsPerHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,9 +365,10 @@ public class MongoDS implements Closeable {
|
|||||||
setting.getInt("connectTimeout");
|
setting.getInt("connectTimeout");
|
||||||
}
|
}
|
||||||
if (connectTimeout != null) {
|
if (connectTimeout != null) {
|
||||||
builder.connectTimeout(connectTimeout);
|
connectionPoolSettingsBuilder.maxWaitTime(connectTimeout, TimeUnit.MILLISECONDS);
|
||||||
log.debug("MongoDB connectTimeout: {}", connectTimeout);
|
log.debug("MongoDB connectTimeout: {}", connectTimeout);
|
||||||
}
|
}
|
||||||
|
builder.applyToConnectionPoolSettings(b -> b.applySettings(connectionPoolSettingsBuilder.build()));
|
||||||
|
|
||||||
// 套接字超时时间;该值会被传递给Socket.setSoTimeout(int)。默以为0(无穷) --int
|
// 套接字超时时间;该值会被传递给Socket.setSoTimeout(int)。默以为0(无穷) --int
|
||||||
Integer socketTimeout = setting.getInt(group + "socketTimeout");
|
Integer socketTimeout = setting.getInt(group + "socketTimeout");
|
||||||
@ -369,7 +376,8 @@ public class MongoDS implements Closeable {
|
|||||||
setting.getInt("socketTimeout");
|
setting.getInt("socketTimeout");
|
||||||
}
|
}
|
||||||
if (socketTimeout != null) {
|
if (socketTimeout != null) {
|
||||||
builder.socketTimeout(socketTimeout);
|
SocketSettings socketSettings = SocketSettings.builder().connectTimeout(socketTimeout, TimeUnit.MILLISECONDS).build();
|
||||||
|
builder.applyToSocketSettings(b -> b.applySettings(socketSettings));
|
||||||
log.debug("MongoDB socketTimeout: {}", socketTimeout);
|
log.debug("MongoDB socketTimeout: {}", socketTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user