mongodb连接不上的问题Exception thrown during connection pool background maintenance task
最近做spring+spring boot1.2 升到spring boot 2.2版本的时候发现, mongodb一直连不上,主要是原有的阿里云配置连接,和腾讯云的相差很大,尤其是连接加密方面,经过多方定位,排查连接方法,和各种方式,终于查出mongodb的连接配置有一个地方是不同的,下面是报错:
Exception thrown during connection pool background maintenance task
2021-09-18T02:08:44.965869943Z
2021-09-18T02:08:44.965873409Z com.mongodb.MongoSocketOpenException: Exception opening socket
2021-09-18T02:08:44.965876735Z at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70)
2021-09-18T02:08:44.965879419Z at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128)
2021-09-18T02:08:44.965881994Z at com.mongodb.internal.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:50)
2021-09-18T02:08:44.965884639Z at com.mongodb.internal.connection.DefaultConnectionPool$UsageTrackingInternalConnectionItemFactory.create(DefaultConnectionPool.java:530)
2021-09-18T02:08:44.965887404Z at com.mongodb.internal.connection.DefaultConnectionPool$UsageTrackingInternalConnectionItemFactory.create(DefaultConnectionPool.java:518)
2021-09-18T02:08:44.965890159Z at com.mongodb.internal.connection.ConcurrentPool.createNewAndReleasePermitIfFailure(ConcurrentPool.java:181)
2021-09-18T02:08:44.965892835Z at com.mongodb.internal.connection.ConcurrentPool.ensureMinSize(ConcurrentPool.java:175)
2021-09-18T02:08:44.96589544Z at com.mongodb.internal.connection.DefaultConnectionPool$3.run(DefaultConnectionPool.java:317)
2021-09-18T02:08:44.965898034Z at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
2021-09-18T02:08:44.965900659Z at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
2021-09-18T02:08:44.965903183Z at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)2021-09-18T02:08:44.965915216Z at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
2021-09-18T02:08:44.965917882Z at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
2021-09-18T02:08:44.965920366Z at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
2021-09-18T02:08:44.96592286Z at java.lang.Thread.run(Thread.java:745)
2021-09-18T02:08:44.965925305Z Caused by: java.net.SocketTimeoutException: connect timed out
2021-09-18T02:08:44.96592777Z at java.net.PlainSocketImpl.socketConnect(Native Method)
2021-09-18T02:08:44.965930234Z at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
2021-09-18T02:08:44.965932729Z at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
2021-09-18T02:08:44.965935835Z at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
2021-09-18T02:08:44.965938369Z at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
2021-09-18T02:08:44.965940805Z at java.net.Socket.connect(Socket.java:589)
2021-09-18T02:08:44.965943259Z at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64)
2021-09-18T02:08:44.965945724Z at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79)
2021-09-18T02:08:44.965948208Z at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65)
2021-09-18T02:08:44.965950683Z ... 14 common frames omitted
2021-09-18T02:08:44.965953117Z
腾讯的连接方式:
MongoConfiguration
import com.mongodb.*;
import com.mongodb.client.MongoDatabase;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;import java.util.ArrayList;
import java.util.List;/*** mongoDB配置* @author chengge*/
@Configuration
@ConditionalOnClass(MongoDbFactory.class)
public class MongoConfiguration {@Bean@ConfigurationProperties(value = MongoProperties.MONGO_PROPERTIES_PREFIX)public MongoProperties getMongoSettingsProperties(){return new MongoProperties();}/*** 覆盖容器中默认的MongoDbFacotry Bean*/public MongoDbFactory mongoDbFactory(MongoProperties properties) {MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.connectionsPerHost(properties.getMaxConnectionsPerHost());builder.minConnectionsPerHost(properties.getMinConnectionsPerHost());builder.threadsAllowedToBlockForConnectionMultiplier(properties.getThreadsAllowedToBlockForConnectionMultiplier());builder.serverSelectionTimeout(properties.getServerSelectionTimeout());builder.maxWaitTime(properties.getMaxWaitTime());builder.maxConnectionIdleTime(properties.getMaxConnectionIdleTime());builder.maxConnectionLifeTime(properties.getMaxConnectionLifeTime());builder.connectTimeout(properties.getConnectTimeout());builder.socketTimeout(properties.getSocketTimeout());builder.sslEnabled(properties.getSslEnabled());builder.sslInvalidHostNameAllowed(properties.getSslInvalidHostNameAllowed());builder.alwaysUseMBeans(properties.getAlwaysUseMBeans());builder.heartbeatFrequency(properties.getHeartbeatFrequency());builder.minHeartbeatFrequency(properties.getMinHeartbeatFrequency());builder.heartbeatConnectTimeout(properties.getHeartbeatConnectTimeout());builder.heartbeatSocketTimeout(properties.getHeartbeatSocketTimeout());builder.localThreshold(properties.getLocalThreshold());
// 创建认证客户端MongoClientURI connStr = new MongoClientURI(properties.getAddressList(),builder);MongoClient mongoClient = new MongoClient(connStr);// // 创建MongoDbFactoryMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, properties.getDbName());return mongoDbFactory;}//第一个数据库 默认作为主数据库 需要添加注解 @Primary ,后面的数据库不需要这个注解@Beanpublic MongoTemplate getMongoTemplate() {return new MongoTemplate(mongoDbFactory(getMongoSettingsProperties()) );}}
MongoProperties
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;import java.util.ArrayList;/*** mongoDB配置* @author chengge*/
@Setter
@Getter
@ToString
public class MongoProperties {public static final String MONGO_PROPERTIES_PREFIX = "spring.mongo";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 Integer connectionsPerHost = 50;/*** 等待连接数*/private Integer waitingConnectionsNumber = 50;/*** mongo的jar包*/private String mapPackage;private String authenticationDatabase;private String address;private String dbName;private String auth;private String password;private int port;private String addressList;}
application.yml
spring:mongo:mapPackage: com.*.*.modeladdress: localhost:27017auth: userpassword: passworddbName: db-nameaddressList: mongodb://user:password@localhost:27017/db_name?authSource=admin&replicaSet=cmgo-79qlu0kn_0
阿里的配置文件:
MongoConfiguration
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;import java.util.ArrayList;
import java.util.List;/*** mongoDB配置* @author chengge*/
@Configuration
@ConditionalOnClass(MongoDbFactory.class)
public class MongoConfiguration {@Bean@ConfigurationProperties(value = MongoProperties.MONGO_PROPERTIES_PREFIX)public MongoProperties getMongoSettingsProperties(){return new MongoProperties();}/*** 覆盖容器中默认的MongoDbFacotry Bean*/public MongoDbFactory mongoDbFactory(MongoProperties properties) {MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.connectionsPerHost(properties.getMaxConnectionsPerHost());builder.minConnectionsPerHost(properties.getMinConnectionsPerHost());builder.threadsAllowedToBlockForConnectionMultiplier(properties.getThreadsAllowedToBlockForConnectionMultiplier());builder.serverSelectionTimeout(properties.getServerSelectionTimeout());builder.maxWaitTime(properties.getMaxWaitTime());builder.maxConnectionIdleTime(properties.getMaxConnectionIdleTime());builder.maxConnectionLifeTime(properties.getMaxConnectionLifeTime());builder.connectTimeout(properties.getConnectTimeout());builder.socketTimeout(properties.getSocketTimeout());// builder.socketKeepAlive(properties.getSocketKeepAlive());builder.sslEnabled(properties.getSslEnabled());builder.sslInvalidHostNameAllowed(properties.getSslInvalidHostNameAllowed());builder.alwaysUseMBeans(properties.getAlwaysUseMBeans());builder.heartbeatFrequency(properties.getHeartbeatFrequency());builder.minHeartbeatFrequency(properties.getMinHeartbeatFrequency());builder.heartbeatConnectTimeout(properties.getHeartbeatConnectTimeout());builder.heartbeatSocketTimeout(properties.getHeartbeatSocketTimeout());builder.localThreshold(properties.getLocalThreshold());MongoClientOptions mongoClientOptions = builder.build();// MongoDB地址列表List<ServerAddress> serverAddresses = new ArrayList<>();for (String address : properties.getAddress()) {String[] hostAndPort = address.split(":");String host = hostAndPort[0];Integer port = Integer.parseInt(hostAndPort[1]);ServerAddress serverAddress = new ServerAddress(host, port);serverAddresses.add(serverAddress);}// 连接认证MongoCredential mongoCredential = MongoCredential.createCredential(properties.getAuth()[0], properties.getDbName(), properties.getPassword());
// 创建认证客户端MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredential, mongoClientOptions);// // 创建MongoDbFactoryMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, properties.getDbName());return mongoDbFactory;}//第一个数据库 默认作为主数据库 需要添加注解 @Primary ,后面的数据库不需要这个注解@Beanpublic MongoTemplate getMongoTemplate() {return new MongoTemplate(mongoDbFactory(getMongoSettingsProperties()));}}
MongoProperties
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;import java.util.ArrayList;/*** mongoDB配置* @author chengge*/
@Setter
@Getter
@ToString
public class MongoProperties {public static final String MONGO_PROPERTIES_PREFIX = "spring.mongo";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 Integer connectionsPerHost = 50;/*** 等待连接数*/private Integer waitingConnectionsNumber = 50;/*** mongo的jar包*/private String mapPackage;private String authenticationDatabase;private ArrayList<String> address;private String dbName;private String[] auth;private char[] password;private int port;
}
application.yml
spring:mongo:mapPackage: com.*.*.modeladdress: localhost:27017auth: userpassword: passworddbName: db-name
以上的方式主要是因为腾讯的mongodb对3.0和4.0的版本连接做了很大的限制,而阿里云则对mongodb的连接没有做这么大的限制。
好啦以上就是我个人所得经验,如果有不足的地方,或者有需要改进的地方和更好的建议,请大家联系我哦。
都看到这里了,点个关注把。
mongodb连接不上的问题Exception thrown during connection pool background maintenance task相关推荐
- 阿里云ECS lnmp linux7 安装mongodb连接不上 child process failed, exited with error number
linux安装mongodb安装网上有很多教程,我就不赘述了: ##安装mongodb连接:https://www.cnblogs.com/Lovebugs/p/8606000.html 我主要总结一 ...
- MongoDB compass 连接不上远程服务器的解决方法
MongoDB compass 连接不上远程服务器的解决方法 参考文章: (1)MongoDB compass 连接不上远程服务器的解决方法 (2)https://www.cnblogs.com/li ...
- studio 3t连接linux上的MongoDB
一.linux上的步骤 用本地wmware上的linux测试,先在linux上启动MongoDB并测试其功能: 留意这句:db.createUser({user:"admin",p ...
- studio3T连接不上mongoDB
引用地址:https://www.cnblogs.com/kuange/p/10918220.html 使用studio 3T连接不上mongoDB,使用RoBo 3T可以连接 报错信息 这是因为mo ...
- Windows系统启动MongoDB本地可以访问,远程连接不上问题
我在windows系统上安装了mongodb之后,本地测试了一下,可以连接上,但是远程访问时候发现连接被拒绝.网上百度说是配置文件默认只能访问本地,需要改mongod.cfg配置文件.然而改了之后重启 ...
- mongodb compass连接不上远程服务器(亲测 已解决)
mongo compass连接不上远程服务器的原因有很多,我也遇到过此类问题,我是因为隔了一周之后没有使用mongodb cloud 远程数据库,再次连接的时候的发现怎么连也连接不上,出现这个错误:本 ...
- springboot集成mongodb 连接池 多数据库源,源码demo
上一篇介绍了 springboot集成mongodb 多数据库源切换 源码demo 开发环境: windows 7 idea windows64 mongodb 如果没安装运行 点这里 navicat ...
- mongodb连接失败_MongoDB 基础入门
mongodb 一.NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数 ...
- mongodb连接java_如何从Java EE无状态应用程序连接到MongoDB
mongodb连接java 在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池. 如果您开发的REST API对 ...
- mysql创建连接失败怎么办,MYSQL在Windows 2003上连接不上的解决方法
MYSQL在Windows 2003上连接不上的解决方法 今天搭建mysql数据库,连接了半天,都提示10061错误,以为密码出了问题试了半天,压根连服务都连接不上,忙活了半个多小时,才发现是系统补丁 ...
最新文章
- POJ1722二维spfa+优先队列优化
- 达梦数据库的基本使用
- 学习 ---AJAX如何用于Web部件
- Python中join 和 split详解
- react入门--------安装react
- Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)
- 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
- 【Python】Matplotlib绘制百变椭圆
- Qt工作笔记-QTreeWidget求总结点数以及此树中最多孩子的个数(非递归)
- 【commons-httpclient】Java中HttpClient工具访问Web请求
- HDU 2544 最短路 Dijkstra
- 思科三层+TPAC200+TP AP实现每个SSID独立网段
- 【1】Python 视频文字识别提取 - Mp4转换成Mp3
- 智能电视有网但是服务器超时,智能电视越用越卡怎么办?四招教你解决电视卡顿...
- Java聊天室系统(三):图形界面窗口展示
- 导出excel.支持在线打开保存
- 【W5500】STM32 H743驱动W5500进行UDP收发
- 如何从screen Attached 恢复
- 虚拟内存修改盘符的设置方法
- 计算机基础知识【4】(08-08)