SimpleMongoDbFactory类已经失效,被SimpleMongoClientDbFactory替代
老版本的mongodbtemplate连接池的用法
spring:
data:
mongodb:
address: 127.0.0.1:37017
replica-set:
database: xxx
username: xxx
password: xxxx
# Configure spring.data.mongodbDB Pool
min-connections-per-host: 10
max-connections-per-host: 100
threads-allowed-to-block-for-connection-multiplier: 5
server-selection-timeout: 30000
max-wait-time: 120000
max-connection-idle-time: 0
max-connection-life-time: 0
connect-timeout: 10000
socket-timeout: 0
socket-keep-alive: false
ssl-enabled: false
ssl-invalid-host-name-allowed: false
always-use-m-beans: false
heartbeat-socket-timeout: 20000
heartbeat-connect-timeout: 20000
min-heartbeat-frequency: 500
heartbeat-frequency: 10000
local-threshold: 15
authentication-database: admin
import java.util.List; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; @Data
@Component
//@PropertySource(value = "classpath:mongo-pool.properties")
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoSettingsProperties { private List<String> address;
private String replicaSet;
private String database;
private String username;
private String password;
private Integer minConnectionsPerHost = 0;
private Integer maxConnectionsPerHost = 100;
private Integer threadsAllowedToBlockForConnectionMultiplier = 5;
private Integer serverSelectionTimeout = 30000;
private Integer maxWaitTime = 120000;
private Integer maxConnectionIdleTime = 0;
private Integer maxConnectionLifeTime = 0;
private Integer connectTimeout = 10000;
private Integer socketTimeout = 0;
private Boolean socketKeepAlive = false;
private Boolean sslEnabled = false;
private Boolean sslInvalidHostNameAllowed = false;
private Boolean alwaysUseMBeans = false;
private Integer heartbeatConnectTimeout = 20000;
private Integer heartbeatSocketTimeout = 20000;
private Integer minHeartbeatFrequency = 500;
private Integer heartbeatFrequency = 10000;
private Integer localThreshold = 15;
private String authenticationDatabase; }
import java.util.ArrayList;
import java.util.List; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress; @Configuration
public class MongoConfig {
// 覆盖默认的MongoDbFactory
@Bean
public MongoDbFactory mongoDbFactory(MongoSettingsProperties mongoSettingsProperties) {
// 客户端配置(连接数、副本集群验证)
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(mongoSettingsProperties.getMaxConnectionsPerHost());
builder.minConnectionsPerHost(mongoSettingsProperties.getMinConnectionsPerHost());
if (mongoSettingsProperties.getReplicaSet() != null) {
builder.requiredReplicaSetName(mongoSettingsProperties.getReplicaSet());
}
builder.threadsAllowedToBlockForConnectionMultiplier(
mongoSettingsProperties.getThreadsAllowedToBlockForConnectionMultiplier());
builder.serverSelectionTimeout(mongoSettingsProperties.getServerSelectionTimeout());
builder.maxWaitTime(mongoSettingsProperties.getMaxWaitTime());
builder.maxConnectionIdleTime(mongoSettingsProperties.getMaxConnectionIdleTime());
builder.maxConnectionLifeTime(mongoSettingsProperties.getMaxConnectionLifeTime());
builder.connectTimeout(mongoSettingsProperties.getConnectTimeout());
builder.socketTimeout(mongoSettingsProperties.getSocketTimeout());
builder.sslEnabled(mongoSettingsProperties.getSslEnabled());
builder.sslInvalidHostNameAllowed(mongoSettingsProperties.getSslInvalidHostNameAllowed());
builder.alwaysUseMBeans(mongoSettingsProperties.getAlwaysUseMBeans());
builder.heartbeatFrequency(mongoSettingsProperties.getHeartbeatFrequency());
builder.minHeartbeatFrequency(mongoSettingsProperties.getMinHeartbeatFrequency());
builder.heartbeatConnectTimeout(mongoSettingsProperties.getHeartbeatConnectTimeout());
builder.heartbeatSocketTimeout(mongoSettingsProperties.getHeartbeatSocketTimeout());
builder.localThreshold(mongoSettingsProperties.getLocalThreshold()); MongoClientOptions mongoClientOptions = builder.build(); // MongoDB地址列表
List<ServerAddress> serverAddresses = new ArrayList<>();
for (String address : mongoSettingsProperties.getAddress()) {
String[] hostAndPort = address.split(":");
String host = hostAndPort[0];
Integer port = Integer.parseInt(hostAndPort[1]);
ServerAddress serverAddress = new ServerAddress(host, port);
serverAddresses.add(serverAddress);
}
System.out.println("serverAddresses:" + serverAddresses.toString()); // 连接认证
//List<MongoCredential> mongoCredentialList = new ArrayList<>();
// 创建客户端和Factory
MongoClient mongoClient =null;
if (mongoSettingsProperties.getUsername() != null) {
MongoCredential mongoCredential= MongoCredential.createScramSha1Credential(
mongoSettingsProperties.getUsername(),
mongoSettingsProperties.getAuthenticationDatabase() != null ? mongoSettingsProperties
.getAuthenticationDatabase() : mongoSettingsProperties.getDatabase(),
mongoSettingsProperties.getPassword().toCharArray());
mongoClient= new MongoClient(serverAddresses,mongoCredential, mongoClientOptions);
}
else{
mongoClient= new MongoClient(serverAddresses, mongoClientOptions);
} MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient,mongoSettingsProperties.getDatabase()); return mongoDbFactory;
}
}
新版的要看 com.mongodb.ConnectionString 中的具体参数配置
具体看translateOptions的方法可以配置哪些参数
来源
springboot2.2.0升级过程
MongoDB Driver:使用正确的姿势连接复制集
MongoDB java连接参数说明
SimpleMongoDbFactory类已经失效,被SimpleMongoClientDbFactory替代的更多相关文章
- IOS 伪类:active失效
IOS中不兼容:active伪类,所以在状态控制上就会有问题,解决办法是,添加一个空的点击事件: 移动端添加:ontouchstart <a class="m-btn" on ...
- 如何利用缓存机制实现JAVA类反射性能提升30倍
一次性能提高30倍的JAVA类反射性能优化实践 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第4期-支付结算部支付研发团队高级工程师陶红<JAVA类反射技术&优化> ...
- Objective-C Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)
概述 采用Event Bus模式(事件总线),可以使观察者模式中的观察者和被观察者实现解耦. 在.Net 中使用观察者模式,可以使用事件(委托)和接口(类).Orchard Event Bus使用的 ...
- WCF初探-22:WCF中使用Message类(上)
前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况, ...
- C#定义类成员
1.成员定义 public--成员可以由任何代码访问. private--成员只能由类中的代码访问(如果没有使用任何关键字,就默认使用这个关键字). internal--成员只能由定义它的程序集(项目 ...
- TVS_压敏电阻等保护类器件的布局问题
世上本没有垃圾,垃圾都是放错了位置的资源. 对于电路来说,保护器件就是其保护作用的关键资源,但如果放错了位置,它就是垃圾:甚至不仅是垃圾,而还可能成为祸害. 由最近承接的几起电路原理图审核项目来看,触 ...
- Objective-C Runtime 运行时之一:类与对象(转载)
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- C++类静态数据成员与类静态成员函数
from:://http://blog.csdn.net/taina2008/article/details/1684834 把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实 ...
随机推荐
- [AcWing 35] 反转链表
迭代版本 点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next ...
- 1.16 Linux该如何学习(新手入门必看)
本节旨在介绍对于初学者如何学习 Linux 的建议.如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法. 如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由 ...
- Centos7部署Redis集群
Redis简介 Redis(Remote Dictionary Server)是完全开源的.遵守BSD协议的.高性能的Key-Value数据库. Redis与其他Key-Value缓存产品有一下三个特 ...
- 169. Majority Element - LeetCode
Question 169. Majority Element Solution 思路:构造一个map存储每个数字出现的次数,然后遍历map返回出现次数大于数组一半的数字. 还有一种思路是:对这个数组排 ...
- 150. Evaluate Reverse Polish Notation - LeetCode
Question 150. Evaluate Reverse Polish Notation Solution 2 1 + 3 * 是((2+1)*3)的后缀(postfix)或逆波兰(reverse ...
- Spring Boot下Spring Batch入门实例
一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...
- 【python】python连接Oracle数据库
python连接Oracle数据库 查看Oracle版本 select * from v$version 下载对应版本的InstantClient 下载网址 InstantClient 1.解压Ins ...
- nodejs使用 svg-captcha 做验证码及验证
一.需求 使用 nodejs 做后端开发,需要请求验证码,在 github 上看到了 svg-captcha 这个库,发现他是将 text 转 svg 进行返回的,安全性也有保证,不会被识别成文字. ...
- webpack基础知识介绍
1.开发模式 开发模式顾名思义就是我们开发代码时使用的模式 webpack默认只处理js文件,对样式是没办法处理的.因此要处理css资源需要引入CSS-loader 处理CSS资源 如果要使用 css ...
- 翻页组件page-flip调用问题
翻页组件重新调用解决方案 翻页组件:page-flip import { PageFlip } from 'page-flip' pagefile() { //绘制翻页 this.pageFlip = ...