MyBatis 內(nèi)置連接池 POOLED 詳解
MyBatis 提供了一個(gè)內(nèi)置的數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn) POOLED,它是 MyBatis 自帶的一個(gè)簡(jiǎn)單但高效的連接池實(shí)現(xiàn)。
一、POOLED 連接池基本特性
1. 核心特點(diǎn)
- 輕量級(jí)實(shí)現(xiàn):不依賴第三方連接池庫(kù)
- 基本功能完備:滿足大多數(shù)小型應(yīng)用的連接池需求
- 配置簡(jiǎn)單:直接在 MyBatis 配置文件中設(shè)置
- 自動(dòng)管理:自動(dòng)處理連接的獲取、回收和釋放
2. 適用場(chǎng)景
- 中小型應(yīng)用
- 開發(fā)和測(cè)試環(huán)境
- 不需要高級(jí)連接池功能的場(chǎng)景
二、配置方式
在 MyBatis 的配置文件中配置 POOLED 數(shù)據(jù)源:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
<!-- 以下是連接池特有配置 -->
<property name="poolMaximumActiveConnections" value="10"/>
<property name="poolMaximumIdleConnections" value="5"/>
<property name="poolMaximumCheckoutTime" value="20000"/>
<property name="poolTimeToWait" value="20000"/>
<property name="poolPingQuery" value="SELECT 1"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingConnectionsNotUsedFor" value="3600000"/>
</dataSource>
</environment>
</environments>
三、主要配置參數(shù)詳解
| 參數(shù)名 | 說明 | 默認(rèn)值 |
|---|---|---|
| poolMaximumActiveConnections | 連接池中最大活動(dòng)連接數(shù) | 10 |
| poolMaximumIdleConnections | 連接池中最大空閑連接數(shù) | 5 |
| poolMaximumCheckoutTime | 連接被檢出后的最大使用時(shí)間(毫秒) | 20000 |
| poolTimeToWait | 獲取連接時(shí)的等待超時(shí)時(shí)間(毫秒) | 20000 |
| poolPingQuery | 用于檢測(cè)連接是否有效的SQL語(yǔ)句 | 無 |
| poolPingEnabled | 是否啟用連接檢測(cè) | false |
| poolPingConnectionsNotUsedFor | 連接多久未使用后需要檢測(cè)(毫秒) | 0 |
四、POOLED 連接池工作原理
初始化階段:
- 創(chuàng)建初始的空閑連接(不超過poolMaximumIdleConnections)
獲取連接:
- 首先嘗試從空閑池獲取可用連接
- 如果沒有可用連接且未達(dá)到最大活動(dòng)連接數(shù),創(chuàng)建新連接
- 如果已達(dá)到最大活動(dòng)連接數(shù),等待直到有連接釋放或超時(shí)
歸還連接:
- 使用完畢后連接返回到空閑池
- 如果空閑池已滿,則直接關(guān)閉連接
連接檢測(cè):
- 如果啟用了poolPingEnabled,會(huì)定期檢測(cè)連接有效性
- 使用poolPingQuery發(fā)送測(cè)試SQL驗(yàn)證連接
五、與第三方連接池對(duì)比
| 特性 | MyBatis POOLED | HikariCP | Druid |
|---|---|---|---|
| 性能 | 中等 | 極高 | 高 |
| 功能 | 基礎(chǔ) | 豐富 | 非常豐富 |
| 監(jiān)控 | 無 | 基本 | 全面 |
| 適用場(chǎng)景 | 小型應(yīng)用 | 高性能應(yīng)用 | 企業(yè)級(jí)應(yīng)用 |
六、最佳實(shí)踐建議
生產(chǎn)環(huán)境建議:
- 對(duì)于生產(chǎn)環(huán)境,建議使用更成熟的連接池如 HikariCP 或 Druid
- POOLED 適合開發(fā)和測(cè)試環(huán)境使用
配置優(yōu)化建議:
<!-- 優(yōu)化后的配置示例 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="password"/> <property name="poolMaximumActiveConnections" value="20"/> <property name="poolMaximumIdleConnections" value="10"/> <property name="poolMaximumCheckoutTime" value="30000"/> <property name="poolTimeToWait" value="10000"/> <property name="poolPingEnabled" value="true"/> <property name="poolPingQuery" value="SELECT 1"/> <property name="poolPingConnectionsNotUsedFor" value="3600000"/> </dataSource>
常見問題處理:
- 連接泄漏:確保在所有代碼路徑中都正確關(guān)閉連接
- 連接超時(shí):適當(dāng)增加poolMaximumCheckoutTime和poolTimeToWait
- 連接失效:?jiǎn)⒂胮oolPingEnabled并設(shè)置合理的檢測(cè)間隔
升級(jí)到第三方連接池:
如果需要更強(qiáng)大的功能,可以輕松替換為其他連接池:<dataSource type="com.zaxxer.hikari.HikariDataSource"> <!-- HikariCP 配置 --> </dataSource>
MyBatis 的 POOLED 連接池提供了基本但夠用的連接池功能,對(duì)于不復(fù)雜的小型應(yīng)用來說是一個(gè)簡(jiǎn)便的選擇。但對(duì)于需要更高性能、更好監(jiān)控或更復(fù)雜功能的生產(chǎn)環(huán)境,建議考慮使用專門的連接池實(shí)現(xiàn)。
到此這篇關(guān)于MyBatis 內(nèi)置連接池 POOLED 詳解的文章就介紹到這了,更多相關(guān)MyBatis 連接池 POOLED 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot整合mybatis實(shí)現(xiàn)多表查詢的實(shí)戰(zhàn)記錄
SpringBoot對(duì)數(shù)據(jù)庫(kù)操作有多種方式,下面這篇文章主要給大家介紹了關(guān)于springboot整合mybatis實(shí)現(xiàn)多表查詢的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08
SpringBoot項(xiàng)目Web攔截器使用的多種方式
在Spring?Boot應(yīng)用中,Web攔截器(Interceptor)是一種用于在請(qǐng)求處理的不同階段執(zhí)行自定義邏輯的機(jī)制,下面給大家介紹SpringBoot項(xiàng)目Web攔截器使用的多種方式,感興趣的朋友一起看看吧2025-05-05
Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解
這篇文章主要介紹了Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
SpringBoot項(xiàng)目集成Swagger和swagger-bootstrap-ui及常用注解解讀
這篇文章主要介紹了SpringBoot項(xiàng)目集成Swagger和swagger-bootstrap-ui及常用注解解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

