jdbc中自帶MySQL?連接池實(shí)踐示例
引言
在上期文章自定義 MySQL 連接池中,我提到了沒(méi)找到一個(gè)特別合適的 MySQL 連接池實(shí)現(xiàn),所以自己寫(xiě)了一個(gè)基于通用池化框架commons-pool2
的 MySQL 連接池,并且模仿了 Go 語(yǔ)言的gorm
框架設(shè)計(jì)思路,把借和還的操作不暴露給用戶,只處理用戶發(fā)來(lái)的 SQL 語(yǔ)句的思路,封裝了一個(gè)com.funtester.db.mysql.MysqlPool
。
可惜打臉的事情來(lái)的太快了,在錄制視頻的時(shí)候偶然發(fā)現(xiàn)了 Intellij 代碼提示有個(gè)com.mysql.cj.jdbc.MysqlConnectionPoolDataSource
的類。這還了得,看名字就知道是我想要的那款。
經(jīng)過(guò)查閱資料,好像也沒(méi)搜到太多詳細(xì)的資料??垂俜降奈臋n,也是遮遮掩掩,仿佛并不很推薦這個(gè)實(shí)現(xiàn)。關(guān)于 MySQL 連接池的管理,在 spring 語(yǔ)境下,應(yīng)該有相當(dāng)多更好的實(shí)踐。但是對(duì)于測(cè)試來(lái)講,那些太重,不太適合腳本化使用。不管怎樣,我還是注意到了這個(gè) MySQL 連接池的實(shí)現(xiàn)類。
關(guān)于它的名字,我在 stackoverflow 看到有人討論,表示說(shuō)叫它 MySQL 連接池并不恰當(dāng),因?yàn)樗皇歉咝Ч芾砹诉B接的資源使用,并沒(méi)有池化。這一點(diǎn)在我實(shí)測(cè)中也發(fā)現(xiàn)了,使用獲取連接的時(shí)候,一直都是在創(chuàng)建新的連接。然后再連接空閑時(shí)間超過(guò)了設(shè)置之后,回收掉這個(gè)連接,回收的方法就是調(diào)用close()
方法。
對(duì)于一般池化技術(shù)來(lái)講,就是為了解決重用問(wèn)題。如果連接并不重用,而是進(jìn)行高效資源回收管理,其實(shí)并不算一個(gè)非常優(yōu)秀的解決方案。
下面是com.mysql.cj.jdbc.MysqlConnectionPoolDataSource
使用實(shí)踐,比較簡(jiǎn)單,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") } } } }
這里有個(gè)很容易的坑,就是有個(gè)setURL()
還有一個(gè)setUrl()
,其實(shí)這兩個(gè)沒(méi)有任何區(qū)別,我只能說(shuō)可能為了兼容舊版本把。還有就是設(shè)置了 URL 之后,好像 database 設(shè)置不起作用了,也是妙明感覺(jué)設(shè)計(jì)真糟心,所以在上面的案例中我也沒(méi)有用到這倆方法。
下面是我的測(cè)試結(jié)果,如圖所示創(chuàng)建了超級(jí)多的線程,但是一直連接的只有很少。大概是經(jīng)過(guò)幾秒鐘就會(huì)被回收一次,但是總創(chuàng)建數(shù)依舊非常高。
以后大概率我不會(huì)使用這個(gè)com.mysql.cj.jdbc.MysqlConnectionPoolDataSource
實(shí)現(xiàn)類,依舊會(huì)繼續(xù)完善自己的連接池功能。
以上就是jdbc中自帶MySQL 連接池實(shí)踐示例的詳細(xì)內(nèi)容,更多關(guān)于jdbc MySQL 連接池的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法
這篇文章主要介紹了MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法,需要的朋友可以參考下2014-09-09Mysql排序和分頁(yè)(order by&limit)及存在的坑
這篇文章主要介紹了Mysql排序和分頁(yè)(order by&limit)及存在的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09RHEL6.2編譯安裝MySQL 5.6.16過(guò)程分享
這篇文章主要介紹了RHEL6.2編譯安裝MySQL 5.6.16過(guò)程分享,還包括了mysql_secure_installation腳本運(yùn)行指導(dǎo),需要的朋友可以參考下2014-07-07MySQL中l(wèi)imit對(duì)查詢語(yǔ)句性能的影響
我們知道,當(dāng)limit offset rows中的offset很大時(shí),會(huì)出現(xiàn)效率問(wèn)題,那么如果提高limit的執(zhí)行效率呢2021-09-09MySQL使用B+Tree當(dāng)索引的優(yōu)勢(shì)有哪些
這篇文章主要介紹了MySQL使用B+Tree當(dāng)索引有哪些優(yōu)勢(shì),幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03mysql數(shù)據(jù)庫(kù)視圖和執(zhí)行計(jì)劃實(shí)戰(zhàn)案例
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫(kù)視圖和執(zhí)行計(jì)劃的相關(guān)資料,在使用MySQL過(guò)程中視圖和執(zhí)行計(jì)劃是一個(gè)很好的工具,文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02