天天看點

【MySQL】自定義資料庫連接配接池和開源資料庫連接配接池的使用

資料庫連接配接背景

資料庫連接配接是一種關鍵的、有限的、昂貴的資源,這一點在多使用者的網頁應用程式中展現得尤為突出。對資料庫連接配接的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的性能名額。資料庫連接配接池正是針對這個問題提出來的。

資料庫連接配接池

資料庫連接配接池負責配置設定、管理和釋放資料庫連接配接,它允許應用程式重複使用一個現有的資料庫連接配接,而不是再重建立立一個。這項技術能明顯提高對資料庫操作的性能。

資料庫連接配接池的原理

沒有使用資料庫連接配接池:一個通路建立一個連接配接,使用完關閉連接配接。而頻繁的建立和關閉連接配接非常耗時

【MySQL】自定義資料庫連接配接池和開源資料庫連接配接池的使用

使用資料庫連接配接池之後:提前準備一些資料庫連接配接,使用時從池中取出,用完歸還連接配接池

【MySQL】自定義資料庫連接配接池和開源資料庫連接配接池的使用

配置檔案 config.properties

JDBCUtils工具類

定義一個連接配接池類并實作<code>java.sql.DataSource</code> 接口。

輸出:

問題:雖然我們自定義了資料庫連接配接池,但是連接配接關閉以後并沒有歸還給資料庫連接配接池,還需要改進<code>歸還連接配接</code>的問題

通過輸出<code>Connection</code>的位址發現<code>Connection</code>類的實作類是<code>JDBC4Connection</code>,是否能夠通過編寫一個類繼承<code>JDBC4Connection</code>,然後重寫<code>close()</code>方法,在關閉連接配接的同時歸還連接配接?

但是這種方式行不通,通過檢視JDBC工具類擷取連接配接的方法我們發現:我們雖然自定義了一個子類,完成了歸還連接配接的操作。但是<code>DriverManager</code>擷取的還是<code>JDBC4Connection</code>這個對象,并不是我們的子類對象。而我們又不能整體去修改驅動包中類的功能!

自定義Connection類。通過裝飾設計模式,實作和mysql驅動包中的Connection實作類相同的功能!

實作步驟:

定義一個類,實作Connection接口

定義Connection連接配接對象和連接配接池容器對象的變量

提供有參構造方法,接收連接配接對象和連接配接池對象,對變量指派

在close()方法中,完成連接配接的歸還

剩餘方法,隻需要調用mysql驅動包的連接配接對象完成即可

自定義連接配接池類

缺點:<code>Connection</code> 接口中要實作的方法太多了,代碼繁雜

提供一個擴充卡類,實作<code>Connection</code>接口,将所有功能進行實作(除了<code>close()</code>方法),作為中間類。自定義連接配接類隻需要繼承這個擴充卡類,重寫需要改進的<code>close()</code>方法即可!

擴充卡類不需要實作<code>close()</code>方法,是以定義為抽象類

自定義連接配接類

通過擴充卡設計模式。完成close()方法的重寫

定義一個類,繼承擴充卡父類

定義<code>Connection</code>連接配接對象和連接配接池容器對象的變量

在<code>close()</code>方法中,完成連接配接的歸還

缺點:自定義連接配接類中的方法已經很簡潔了。剩餘所有的方法已經抽取到了擴充卡類中。但是擴充卡這個類還是我們自己編寫的,也比較麻煩!是以可以使用動态代理的方式來改進。

導入jar包

【MySQL】自定義資料庫連接配接池和開源資料庫連接配接池的使用
【MySQL】自定義資料庫連接配接池和開源資料庫連接配接池的使用

導入配置檔案到src目錄下

建立c3p0連接配接池對象

擷取資料庫連接配接進行使用

配置檔案 <code>c3p0-config.xml</code> 注意該配置檔案的名字是固定的不要改,否則無法識别

<code>initialPoolSize</code>:初始化連接配接數量

<code>maxPoolSize</code>:最大連接配接數量,當連接配接數量超過初始化連接配接數量時,會在連接配接池内繼續建立連接配接,直到達到資料庫連接配接池所能容納的最大連接配接數量

<code>checkoutTimeout</code>:超過時間。如果使用的連接配接數量超過最大連接配接數量,編譯器會在<code>checkoutTimeout</code>時間以後報錯并終止程式。

C3P0資料庫連接配接池的使用

【MySQL】自定義資料庫連接配接池和開源資料庫連接配接池的使用

編寫配置檔案,放在src目錄下

通過Properties集合加載配置檔案

通過Druid連接配接池工廠類擷取資料庫連接配接池對象

擷取資料庫連接配接,進行使用

配置檔案<code>druid.properties</code>

Druid資料庫的使用

工具類的使用