關(guān)于mongodb連接池配置方式
mongodb連接池配置
參考官方描述

如果spring使用以下mongodb的配置
則默認是沒有連接池的
spring:
data:
mongodb:
host: 地址
port: 27017
database: 數(shù)據(jù)庫名
username: 賬號
password: 密碼每隔一兩分鐘沒有去請求的話就會斷開連接重連,每次都要等待5-10秒之間才重新連接上,請求速度很慢,這一點確實非常不友好。
出現(xiàn)這種問題就是maxIdleTimeMS時間太長,縮短每次連接刪除和關(guān)閉之前保持的空閑狀態(tài)等待時間就可以避免這個問題,但也會造成連接池的頻繁連接和關(guān)閉。
每次打開和關(guān)閉控制臺打印如下提示:
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我設(shè)置時間為30秒,不知道為什么我設(shè)置為120秒、60秒好像都不管用。
mongodb的配置
- 就盡量不要用上面的方式來配,需要使用uri的方式來去配,不需要在java代碼中去寫配置類,不需要在java代碼中去寫配置類,不需要在java代碼中去寫配置類。
spring:
data:
mongodb:
uri: mongodb://數(shù)據(jù)庫賬號:數(shù)據(jù)庫密碼@數(shù)據(jù)庫地址:27017/數(shù)據(jù)庫名稱?connectTimeoutMS=5000&socketTimeoutMS=3000&maxPoolSize=30000&minPoolSize=0&maxIdleTimeMS=1000&readPreference=primary&retryWrites=true- uri的前半部分:注意符號格式是固定
mongodb://數(shù)據(jù)庫賬號:數(shù)據(jù)庫密碼@數(shù)據(jù)庫地址:27017/數(shù)據(jù)庫名稱
- uri的后半部分是一些額外配置選項,使用 " ? "這個問號進行標(biāo)識分割,每一個配置選項之間使用" & "符號來銜接。
?connectTimeoutMS=5000 &socketTimeoutMS=3000 &maxPoolSize=30000 &minPoolSize=0 &maxIdleTimeMS=1000 &readPreference=primary &retryWrites=true
連接池中的最小連接數(shù)。默認值為 。
| connectTimeoutMS | 在超時之前嘗試連接的時間(以毫秒為單位)。默認值為 10,000 毫秒,但特定驅(qū)動程序可能具有不同的默認值 |
| socketTimeoutMS | 在嘗試超時之前嘗試在套接字上發(fā)送或接收的時間(以毫秒為單位)。默認值為永不超時,盡管不同的驅(qū)動程序可能會有所不同 |
| maxPoolSize | 連接池中的最大連接數(shù)。默認值為 。100 |
| minPoolSize | 連接池中的最小連接數(shù)。默認值為 。0 |
| maxIdleTimeMS | 連接在刪除和關(guān)閉之前可以在池中保持空閑狀態(tài)的最大毫秒數(shù)。 并非所有驅(qū)動程序都支持此選項。 |
| readPreference | 指定此連接的讀取首選項。 |
| retryWrites | 啟用可重試寫入。 |
需要特別注意maxIdleTimeMS這個時間的設(shè)置,多次測試證實了:超過設(shè)置的指定時間后所有線程池的空閑線程連接會被自動關(guān)閉,關(guān)閉后所有線程池空閑線程會重新連接
參數(shù)配置,根據(jù)你們需求來 ,我只是給出個示例
測試連接斷開后,控制臺日志如下:已經(jīng)開啟指定數(shù)量的線程池?zé)o誤

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SQL Server 完整備份遇到的一個不常見的錯誤及解決方法
這篇文章給大家介紹了SQL Server 完整備份遇到的一個不常見的錯誤及解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2019-05-05
MySQL中使用auto_increment修改初始值和步長
本文主要介紹了MySQL中使用auto_increment修改初始值和步長,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
mysql 定時任務(wù)的實現(xiàn)與使用方法示例
這篇文章主要介紹了mysql 定時任務(wù)的實現(xiàn)與使用方法,結(jié)合實例形式分析了MySQL定時任務(wù)的相關(guān)原理、創(chuàng)建及使用方法,需要的朋友可以參考下2019-11-11
從入門到精通MySQL 數(shù)據(jù)庫索引(實戰(zhàn)案例)
索引是數(shù)據(jù)庫的目錄,提升查詢速度,主要類型包括BTree、Hash、全文、空間索引,需根據(jù)場景選擇,建議用于高頻查詢、關(guān)聯(lián)字段、排序等,避免重復(fù)率高或頻繁更新字段,本文給大家介紹MySQL 數(shù)據(jù)庫索引實戰(zhàn)案例,感興趣的朋友一起看看吧2025-06-06
MySQL 事務(wù)隔離級別及實際業(yè)務(wù)應(yīng)用場景
本文詳細介紹了MySQL的四種事務(wù)隔離級別(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),并探討了每種隔離級別在實際業(yè)務(wù)中的應(yīng)用場景,感興趣的朋友跟隨小編一起看看吧2026-01-01

