关于mongodb连接池配置方式

 更新时间:2025年03月19日 10:06:51   作者:轮孑哥  
这篇文章主要介绍了关于mongodb连接池配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mongodb连接池配置

参考官方描述

如果spring使用以下mongodb的配置

则默认是没有连接池的

spring:
  data:
    mongodb:
      host: 地址
      port: 27017
      database: 数据库名
      username: 账号
      password: 密码

每隔一两分钟没有去请求的话就会断开连接重连,每次都要等待5-10秒之间才重新连接上,请求速度很慢,这一点确实非常不友好。

出现这种问题就是maxIdleTimeMS时间太长,缩短每次连接删除和关闭之前保持的空闲状态等待时间就可以避免这个问题,但也会造成连接池的频繁连接和关闭。

每次打开和关闭控制台打印如下提示:

Closed connection [connectionId{localValue:11, serverValue:1607}] to xxx.cc:27017 because there was a socket exception raised by this connection.
Opened connection [connectionId{localValue:21, serverValue:1623}] to xxx.cc:27017

maxIdleTimeMS我设置时间为30秒,不知道为什么我设置为120秒、60秒好像都不管用。

mongodb的配置

  • 就尽量不要用上面的方式来配,需要使用uri的方式来去配,不需要在java代码中去写配置类,不需要在java代码中去写配置类,不需要在java代码中去写配置类。
spring:
  data:
    mongodb:
      uri: mongodb://数据库账号:数据库密码@数据库地址:27017/数据库名称?connectTimeoutMS=5000&socketTimeoutMS=3000&maxPoolSize=30000&minPoolSize=0&maxIdleTimeMS=1000&readPreference=primary&retryWrites=true
  • uri的前半部分:注意符号格式是固定
mongodb://数据库账号:数据库密码@数据库地址:27017/数据库名称
  • uri的后半部分是一些额外配置选项,使用 " ? "这个问号进行标识分割,每一个配置选项之间使用" & "符号来衔接。
?connectTimeoutMS=5000
&socketTimeoutMS=3000
&maxPoolSize=30000
&minPoolSize=0
&maxIdleTimeMS=1000
&readPreference=primary
&retryWrites=true

连接池中的最小连接数。默认值为 。

connectTimeoutMS

在超时之前尝试连接的时间(以毫秒为单位)。默认值为 10,000 毫秒,但特定驱动程序可能具有不同的默认值

socketTimeoutMS

在尝试超时之前尝试在套接字上发送或接收的时间(以毫秒为单位)。默认值为永不超时,尽管不同的驱动程序可能会有所不同

maxPoolSize连接池中的最大连接数。默认值为 。100
minPoolSize

连接池中的最小连接数。默认值为 。0

maxIdleTimeMS

连接在删除和关闭之前可以在池中保持空闲状态的最大毫秒数。

并非所有驱动程序都支持此选项。

readPreference指定此连接的读取首选项。
retryWrites启用可重试写入。

需要特别注意maxIdleTimeMS这个时间的设置,多次测试证实了:超过设置的指定时间后所有线程池的空闲线程连接会被自动关闭,关闭后所有线程池空闲线程会重新连接

参数配置,根据你们需求来 ,我只是给出个示例

更多参数选项参考地址

测试连接断开后,控制台日志如下:已经开启指定数量的线程池无误

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SQL中Limit的基本与高级用法详解

    SQL中Limit的基本与高级用法详解

    在SQL中LIMIT是一个用于限制结果集返回的行数的子句,这篇文章主要给大家介绍了关于SQL中Limit的基本与高级用法,文中通过代码介绍的非常详细,对大家学习或者使用sql具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-04-04
  • MySQL redo日志写入磁盘的实现过程

    MySQL redo日志写入磁盘的实现过程

    这篇文章主要介绍了MySQL redo日志写入磁盘的实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • SQL Server 完整备份遇到的一个不常见的错误及解决方法

    SQL Server 完整备份遇到的一个不常见的错误及解决方法

    这篇文章给大家介绍了SQL Server 完整备份遇到的一个不常见的错误及解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-05-05
  • 一文分享10个常用的MySQL高级用法

    一文分享10个常用的MySQL高级用法

    MySQL 有很多高级但实用的功能,能让你的查询变得更简洁、更高效,今天分享 10 个我在工作中经常使用的 SQL 技巧,不用死记硬背,掌握了就能立刻提升你的数据库操作水平
    2025-12-12
  • MySQL中使用auto_increment修改初始值和步长

    MySQL中使用auto_increment修改初始值和步长

    本文主要介绍了MySQL中使用auto_increment修改初始值和步长,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • MySQL问答系列之什么情况下会用到临时表

    MySQL问答系列之什么情况下会用到临时表

    MySQL在很多情况下都会用到临时表,下面这篇文章主要给大家介绍了关于MySQL在什么情况下会用到临时表的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • mysql 定时任务的实现与使用方法示例

    mysql 定时任务的实现与使用方法示例

    这篇文章主要介绍了mysql 定时任务的实现与使用方法,结合实例形式分析了MySQL定时任务的相关原理、创建及使用方法,需要的朋友可以参考下
    2019-11-11
  • MySQL不支持InnoDB的解决方法

    MySQL不支持InnoDB的解决方法

    在OpenSUSE下装上MySQL后,发现无法选择添加事务支持数据引擎InnoDB。
    2009-11-11
  • 从入门到精通MySQL 数据库索引(实战案例)

    从入门到精通MySQL 数据库索引(实战案例)

    索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或频繁更新字段,本文给大家介绍MySQL 数据库索引实战案例,感兴趣的朋友一起看看吧
    2025-06-06
  • MySQL 事务隔离级别及实际业务应用场景

    MySQL 事务隔离级别及实际业务应用场景

    本文详细介绍了MySQL的四种事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),并探讨了每种隔离级别在实际业务中的应用场景,感兴趣的朋友跟随小编一起看看吧
    2026-01-01

最新评论