升级MongoDB

This commit is contained in:
VampireAchao 2022-03-09 22:36:23 +08:00
parent b8bfce490b
commit 11bf574aae
2 changed files with 28 additions and 28 deletions

View File

@ -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>

View File

@ -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);
} }