Mybatis 數(shù)據(jù)庫連接池的實(shí)現(xiàn)示例
1)數(shù)據(jù)庫連接池定義
- 數(shù)據(jù)庫連接池是個容器,負(fù)責(zé)分配、管理數(shù)據(jù)庫連接(Connection)
- 它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個
- 釋放空閑時(shí)間超過最大空閑時(shí)間的連接,來避免因?yàn)闆]有釋放連接而引起的數(shù)據(jù)庫連接遺漏。也就是,如果某個操作占用的連接超出了預(yù)定的時(shí)間,就會自動釋放連接。
2)連接對象工作原理
【1】無連接池
- [1]每次執(zhí)行某個操作的時(shí)候,需要手動建立一個連接對象。
- [2]再使用連接對象去訪問數(shù)據(jù)庫執(zhí)行相關(guān)的操作。
- [3]當(dāng)應(yīng)用程序不再需要這個連接時(shí),它會關(guān)閉連接。
- [4]如果應(yīng)用程序需要再次連接數(shù)據(jù)庫,它會重新創(chuàng)建一個新的數(shù)據(jù)庫連接。

【2】有連接池
- [1]初始化連接池。在系統(tǒng)啟動時(shí),連接池會生成一定數(shù)量的數(shù)據(jù)庫連接,并將這些連接放入池中。
- [2]獲取連接。當(dāng)應(yīng)用程序需要與數(shù)據(jù)庫進(jìn)行交互時(shí),它會從連接池中獲取一個可用的連接。
- [3]使用連接。應(yīng)用程序使用連接進(jìn)行數(shù)據(jù)庫操作。
- [4]釋放連接。當(dāng)應(yīng)用程序完成數(shù)據(jù)庫操作后,它會將連接返回給連接池,而不是將連接關(guān)閉。這樣可以避免頻繁地創(chuàng)建和銷毀連接,提高系統(tǒng)性能。
- [5]銷毀連接。如果連接池中的連接長時(shí)間未被使用,連接池會將這些連接銷毀,以釋放系統(tǒng)資源。

3)標(biāo)準(zhǔn)接口DataSource
- 官方(sun)提供的數(shù)據(jù)庫連接池接口,由第三方組織實(shí)現(xiàn)此接口。
- 它定義了訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)方法。這些方法包括從數(shù)據(jù)庫中檢索數(shù)據(jù)并將其返回到Java應(yīng)用程序,以及將數(shù)據(jù)寫回到數(shù)據(jù)庫中的能力。
DataSource接口提供以下方法:
| 方法 | 描述 |
|---|---|
| getConnection() | 獲取一個數(shù)據(jù)庫連接 |
| getConnection(String username, String password) | 獲取一個帶有用戶名和密碼的數(shù)據(jù)庫連接。 |
| getLoginTimeout() | 獲取登錄超時(shí)時(shí)間。 |
| setLoginTimeout(int seconds) | 設(shè)置登錄超時(shí)時(shí)間。 |
| getLogWriter() | 獲取一個PrintWriter,用于將日志消息寫入。 |
| setLogWriter(PrintWriter out) | 設(shè)置一個PrintWriter,用于將日志消息寫入。 |
| unwrap(Class iface) | 將DataSource轉(zhuǎn)換為指定接口的實(shí)現(xiàn)對象。 |
| isWrapperFor(Class<?> iface) | 判斷是否DataSource實(shí)現(xiàn)了指定接口。 |
| getLoginTimeout() | 獲取登錄超時(shí)時(shí)間。 |
| setLoginTimeout(int seconds) | 設(shè)置登錄超時(shí)時(shí)間。 |
| getLogWriter() | 獲取一個PrintWriter,用于將日志消息寫入。 |
| setLogWriter(PrintWriter out) | 設(shè)置一個PrintWriter,用于將日志消息寫入。 |
| unwrap(Class iface) | 將DataSource轉(zhuǎn)換為指定接口的實(shí)現(xiàn)對象。 |
| isWrapperFor(Class<?> iface) | 判斷是否DataSource實(shí)現(xiàn)了指定接口。 |
4)常用的數(shù)據(jù)庫連接池
C3PO、 DBCP、Druid(德魯伊)、HIkari(追光者),主要介紹常用的最后兩個。
【1】 Druid(德魯伊)
- 阿里巴巴開源的數(shù)據(jù)庫連接池項(xiàng)目
- 功能強(qiáng)大,性能優(yōu)秀,是java語言最好的數(shù)據(jù)庫連接池之一
【2】 Hikari(追光者)
SpringBoot默認(rèn)自帶的連接池
運(yùn)行SpringBoot項(xiàng)目的一個測試?yán)?,可以得知是默認(rèn)使用Hikari連接池。

5)如何切換連接池?
pom.xml文件配置
在pom.xml配置文件中引入德魯伊的起步依賴
依賴坐標(biāo)如下:
<!--引入德魯伊的起步依賴--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
刷新后還是不行的需要去application配置文件聲明一下type。在application.properties文件中加上type的配置信息:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
測試切換成功

到此這篇關(guān)于Mybatis 數(shù)據(jù)庫連接池的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mybatis 數(shù)據(jù)庫連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java后端如何實(shí)現(xiàn)防止接口重復(fù)提交
這篇文章主要介紹了java后端如何實(shí)現(xiàn)防止接口重復(fù)提交問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Java 獲取當(dāng)前系統(tǒng)時(shí)間的三種方法
這篇文章主要介紹了Java 獲取當(dāng)前系統(tǒng)時(shí)間的三種方法,幫助大家利用Java處理時(shí)間,感興趣的朋友可以了解下2020-10-10
Java經(jīng)典快排思想以及快排的改進(jìn)講解
今天小編就為大家分享一篇關(guān)于Java經(jīng)典快排思想以及快排的改進(jìn)講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
IDEA打開項(xiàng)目不顯示或者缺失項(xiàng)目文件目錄的解決方案
這篇文章主要介紹了IDEA打開項(xiàng)目不顯示或者缺失項(xiàng)目文件目錄的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05
Java選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)的使用詳解
循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個功能而設(shè)置的一種程序結(jié)構(gòu)。它由循環(huán)體中的條件,判斷繼續(xù)執(zhí)行某個功能還是退出循環(huán),選擇結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件,根據(jù)判斷的結(jié)果來控制程序的流程2022-03-03
SpringCloud注冊中心之consul詳細(xì)講解使用方法
Consul是一款由HashiCorp公司開源的,用于服務(wù)治理的軟件,Spring Cloud Consul對其進(jìn)行了封裝,這篇文章主要介紹了springcloud組件consul服務(wù)治理,需要的朋友可以參考下2022-11-11

