最近做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相关推荐

  1. 阿里云ECS lnmp linux7 安装mongodb连接不上 child process failed, exited with error number

    linux安装mongodb安装网上有很多教程,我就不赘述了: ##安装mongodb连接:https://www.cnblogs.com/Lovebugs/p/8606000.html 我主要总结一 ...

  2. MongoDB compass 连接不上远程服务器的解决方法

    MongoDB compass 连接不上远程服务器的解决方法 参考文章: (1)MongoDB compass 连接不上远程服务器的解决方法 (2)https://www.cnblogs.com/li ...

  3. studio 3t连接linux上的MongoDB

    一.linux上的步骤 用本地wmware上的linux测试,先在linux上启动MongoDB并测试其功能: 留意这句:db.createUser({user:"admin",p ...

  4. studio3T连接不上mongoDB

    引用地址:https://www.cnblogs.com/kuange/p/10918220.html 使用studio 3T连接不上mongoDB,使用RoBo 3T可以连接 报错信息 这是因为mo ...

  5. Windows系统启动MongoDB本地可以访问,远程连接不上问题

    我在windows系统上安装了mongodb之后,本地测试了一下,可以连接上,但是远程访问时候发现连接被拒绝.网上百度说是配置文件默认只能访问本地,需要改mongod.cfg配置文件.然而改了之后重启 ...

  6. mongodb compass连接不上远程服务器(亲测 已解决)

    mongo compass连接不上远程服务器的原因有很多,我也遇到过此类问题,我是因为隔了一周之后没有使用mongodb cloud 远程数据库,再次连接的时候的发现怎么连也连接不上,出现这个错误:本 ...

  7. springboot集成mongodb 连接池 多数据库源,源码demo

    上一篇介绍了 springboot集成mongodb 多数据库源切换 源码demo 开发环境: windows 7 idea windows64 mongodb 如果没安装运行 点这里 navicat ...

  8. mongodb连接失败_MongoDB 基础入门

    mongodb 一.NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数 ...

  9. mongodb连接java_如何从Java EE无状态应用程序连接到MongoDB

    mongodb连接java 在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池. 如果您开发的REST API对 ...

  10. mysql创建连接失败怎么办,MYSQL在Windows 2003上连接不上的解决方法

    MYSQL在Windows 2003上连接不上的解决方法 今天搭建mysql数据库,连接了半天,都提示10061错误,以为密码出了问题试了半天,压根连服务都连接不上,忙活了半个多小时,才发现是系统补丁 ...

最新文章

  1. POJ1722二维spfa+优先队列优化
  2. 达梦数据库的基本使用
  3. 学习 ---AJAX如何用于Web部件
  4. Python中join 和 split详解
  5. react入门--------安装react
  6. Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)
  7. 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
  8. 【Python】Matplotlib绘制百变椭圆
  9. Qt工作笔记-QTreeWidget求总结点数以及此树中最多孩子的个数(非递归)
  10. 【commons-httpclient】Java中HttpClient工具访问Web请求
  11. HDU 2544 最短路 Dijkstra
  12. 思科三层+TPAC200+TP AP实现每个SSID独立网段
  13. 【1】Python 视频文字识别提取 - Mp4转换成Mp3
  14. 智能电视有网但是服务器超时,智能电视越用越卡怎么办?四招教你解决电视卡顿...
  15. Java聊天室系统(三):图形界面窗口展示
  16. 导出excel.支持在线打开保存
  17. 【W5500】STM32 H743驱动W5500进行UDP收发
  18. 如何从screen Attached 恢复
  19. 虚拟内存修改盘符的设置方法
  20. 计算机基础知识【4】(08-08)

热门文章

  1. 【Shell案例】【for循环、seq生成】3、输出7的倍数
  2. 关于微信投票刷票的js代码
  3. script用英语怎么说,script英语什么意思
  4. html中input type什么意思,HTML中type是什么意思
  5. 8月第1周基金排行榜 | TokenInsight
  6. 数字化转型:信息系统的生命周期(一)
  7. python语料库是什么,Python 语料库的搭建
  8. 02_基于西门子CM1241的ModbusRTU串口通讯实现
  9. excel如何快速从身份证号码中提取出生日期?
  10. lizzieyzy使用智星云GPU算力