jdbc中自帶MySQL?連接池實踐示例
引言
在上期文章自定義 MySQL 連接池中,我提到了沒找到一個特別合適的 MySQL 連接池實現(xiàn),所以自己寫了一個基于通用池化框架commons-pool2的 MySQL 連接池,并且模仿了 Go 語言的gorm框架設計思路,把借和還的操作不暴露給用戶,只處理用戶發(fā)來的 SQL 語句的思路,封裝了一個com.funtester.db.mysql.MysqlPool。
可惜打臉的事情來的太快了,在錄制視頻的時候偶然發(fā)現(xiàn)了 Intellij 代碼提示有個com.mysql.cj.jdbc.MysqlConnectionPoolDataSource的類。這還了得,看名字就知道是我想要的那款。
經過查閱資料,好像也沒搜到太多詳細的資料。看官方的文檔,也是遮遮掩掩,仿佛并不很推薦這個實現(xiàn)。關于 MySQL 連接池的管理,在 spring 語境下,應該有相當多更好的實踐。但是對于測試來講,那些太重,不太適合腳本化使用。不管怎樣,我還是注意到了這個 MySQL 連接池的實現(xiàn)類。
關于它的名字,我在 stackoverflow 看到有人討論,表示說叫它 MySQL 連接池并不恰當,因為它只是高效管理了連接的資源使用,并沒有池化。這一點在我實測中也發(fā)現(xiàn)了,使用獲取連接的時候,一直都是在創(chuàng)建新的連接。然后再連接空閑時間超過了設置之后,回收掉這個連接,回收的方法就是調用close()方法。
對于一般池化技術來講,就是為了解決重用問題。如果連接并不重用,而是進行高效資源回收管理,其實并不算一個非常優(yōu)秀的解決方案。
下面是com.mysql.cj.jdbc.MysqlConnectionPoolDataSource使用實踐,比較簡單,API 倒是挺多的,但是大多數(shù)都用不到。
package com.funtest.groovytest
import com.funtester.frame.SourceCode
import com.mysql.cj.jdbc.MysqlConnectionPoolDataSource
class MysqlPoolTe extends SourceCode {
public static void main(String[] args) {
def query = "select * from testers limit 2;"
def source = new MysqlConnectionPoolDataSource()
source.setServerName("localhost")
source.setPort(3306)
source.setUser("root")
source.setPassword("root123456")
source.setDatabaseName("funtester")
source.setAllowMultiQueries(true)
def connection = source.getPooledConnection()
def statement = connection.getConnection().createStatement()
while (true) {
sleep(1)
def query = statement.executeQuery(query)
while (query.next()) {
output query.getString("name")
}
}
}
}
這里有個很容易的坑,就是有個setURL()還有一個setUrl(),其實這兩個沒有任何區(qū)別,我只能說可能為了兼容舊版本把。還有就是設置了 URL 之后,好像 database 設置不起作用了,也是妙明感覺設計真糟心,所以在上面的案例中我也沒有用到這倆方法。
下面是我的測試結果,如圖所示創(chuàng)建了超級多的線程,但是一直連接的只有很少。大概是經過幾秒鐘就會被回收一次,但是總創(chuàng)建數(shù)依舊非常高。

以后大概率我不會使用這個com.mysql.cj.jdbc.MysqlConnectionPoolDataSource實現(xiàn)類,依舊會繼續(xù)完善自己的連接池功能。
以上就是jdbc中自帶MySQL 連接池實踐示例的詳細內容,更多關于jdbc MySQL 連接池的資料請關注腳本之家其它相關文章!
相關文章
關于Mysql中current_time/current_date()與now()區(qū)別
這篇文章主要介紹了關于current_time/current_date()與now()區(qū)別,在Mysql中 current_time函數(shù)是顯示當前時間的,而其他兩個函數(shù)有何不同呢, 接下來我們就一起來看看吧2023-04-04
MySQL系統(tǒng)庫之information_schema的實現(xiàn)
information_schema用于存儲數(shù)據(jù)庫元數(shù)據(jù),本文主要介紹了MySQL系統(tǒng)庫之information_schema的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11
MySQL對小數(shù)進行四舍五入的操作實現(xiàn)
數(shù)學函數(shù)是MySQL中常用的一類函數(shù),其主要用于處理數(shù)字,包括整型和浮點數(shù)等等,本文主要介紹了MySQL對小數(shù)進行四舍五入的操作實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-08-08
解決mysql問題:由于找不到MSVCR120.dll,無法繼續(xù)執(zhí)行代碼
這篇文章給大家分享解決mysql問題:由于找不到MSVCR120.dll,無法繼續(xù)執(zhí)行代碼.通過重新安裝程序解決此問題,下面小編把問題記錄及解決過程分享給大家,需要的朋友參考下吧2021-06-06

