Mybatis 數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)示例
1)數(shù)據(jù)庫(kù)連接池定義
- 數(shù)據(jù)庫(kù)連接池是個(gè)容器,負(fù)責(zé)分配、管理數(shù)據(jù)庫(kù)連接(Connection)
- 它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是再重新建立一個(gè)
- 釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的連接,來(lái)避免因?yàn)闆]有釋放連接而引起的數(shù)據(jù)庫(kù)連接遺漏。也就是,如果某個(gè)操作占用的連接超出了預(yù)定的時(shí)間,就會(huì)自動(dòng)釋放連接。
2)連接對(duì)象工作原理
【1】無(wú)連接池
- [1]每次執(zhí)行某個(gè)操作的時(shí)候,需要手動(dòng)建立一個(gè)連接對(duì)象。
- [2]再使用連接對(duì)象去訪問(wèn)數(shù)據(jù)庫(kù)執(zhí)行相關(guān)的操作。
- [3]當(dāng)應(yīng)用程序不再需要這個(gè)連接時(shí),它會(huì)關(guān)閉連接。
- [4]如果應(yīng)用程序需要再次連接數(shù)據(jù)庫(kù),它會(huì)重新創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)連接。
【2】有連接池
- [1]初始化連接池。在系統(tǒng)啟動(dòng)時(shí),連接池會(huì)生成一定數(shù)量的數(shù)據(jù)庫(kù)連接,并將這些連接放入池中。
- [2]獲取連接。當(dāng)應(yīng)用程序需要與數(shù)據(jù)庫(kù)進(jìn)行交互時(shí),它會(huì)從連接池中獲取一個(gè)可用的連接。
- [3]使用連接。應(yīng)用程序使用連接進(jìn)行數(shù)據(jù)庫(kù)操作。
- [4]釋放連接。當(dāng)應(yīng)用程序完成數(shù)據(jù)庫(kù)操作后,它會(huì)將連接返回給連接池,而不是將連接關(guān)閉。這樣可以避免頻繁地創(chuàng)建和銷毀連接,提高系統(tǒng)性能。
- [5]銷毀連接。如果連接池中的連接長(zhǎng)時(shí)間未被使用,連接池會(huì)將這些連接銷毀,以釋放系統(tǒng)資源。
3)標(biāo)準(zhǔn)接口DataSource
- 官方(sun)提供的數(shù)據(jù)庫(kù)連接池接口,由第三方組織實(shí)現(xiàn)此接口。
- 它定義了訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法。這些方法包括從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)并將其返回到Java應(yīng)用程序,以及將數(shù)據(jù)寫回到數(shù)據(jù)庫(kù)中的能力。
DataSource接口提供以下方法:
方法 | 描述 |
---|---|
getConnection() | 獲取一個(gè)數(shù)據(jù)庫(kù)連接 |
getConnection(String username, String password) | 獲取一個(gè)帶有用戶名和密碼的數(shù)據(jù)庫(kù)連接。 |
getLoginTimeout() | 獲取登錄超時(shí)時(shí)間。 |
setLoginTimeout(int seconds) | 設(shè)置登錄超時(shí)時(shí)間。 |
getLogWriter() | 獲取一個(gè)PrintWriter,用于將日志消息寫入。 |
setLogWriter(PrintWriter out) | 設(shè)置一個(gè)PrintWriter,用于將日志消息寫入。 |
unwrap(Class iface) | 將DataSource轉(zhuǎn)換為指定接口的實(shí)現(xiàn)對(duì)象。 |
isWrapperFor(Class<?> iface) | 判斷是否DataSource實(shí)現(xiàn)了指定接口。 |
getLoginTimeout() | 獲取登錄超時(shí)時(shí)間。 |
setLoginTimeout(int seconds) | 設(shè)置登錄超時(shí)時(shí)間。 |
getLogWriter() | 獲取一個(gè)PrintWriter,用于將日志消息寫入。 |
setLogWriter(PrintWriter out) | 設(shè)置一個(gè)PrintWriter,用于將日志消息寫入。 |
unwrap(Class iface) | 將DataSource轉(zhuǎn)換為指定接口的實(shí)現(xiàn)對(duì)象。 |
isWrapperFor(Class<?> iface) | 判斷是否DataSource實(shí)現(xiàn)了指定接口。 |
4)常用的數(shù)據(jù)庫(kù)連接池
C3PO、 DBCP、Druid(德魯伊)、HIkari(追光者),主要介紹常用的最后兩個(gè)。
【1】 Druid(德魯伊)
- 阿里巴巴開源的數(shù)據(jù)庫(kù)連接池項(xiàng)目
- 功能強(qiáng)大,性能優(yōu)秀,是java語(yǔ)言最好的數(shù)據(jù)庫(kù)連接池之一
【2】 Hikari(追光者)
SpringBoot默認(rèn)自帶的連接池
運(yùn)行SpringBoot項(xiàng)目的一個(gè)測(cè)試?yán)樱梢缘弥悄J(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
測(cè)試切換成功
到此這篇關(guān)于Mybatis 數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mybatis 數(shù)據(jù)庫(kù)連接池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringDataJpa多表操作的實(shí)現(xiàn)
開發(fā)過(guò)程中會(huì)有很多多表的操作,他們之間有著各種關(guān)系,本文主要介紹了SpringDataJpa多表操作的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11java統(tǒng)計(jì)文件中每個(gè)字符出現(xiàn)的個(gè)數(shù)
這篇文章主要為大家詳細(xì)介紹了java統(tǒng)計(jì)文件中每個(gè)字符出現(xiàn)的個(gè)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Java解決xss轉(zhuǎn)義導(dǎo)致轉(zhuǎn)碼的問(wèn)題
跨站腳本攻擊XSS是最普遍的Web應(yīng)用安全漏洞,本文主要介紹了Java解決xss轉(zhuǎn)義導(dǎo)致轉(zhuǎn)碼的問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08基于JVM 調(diào)優(yōu)的技巧總結(jié)分析
本篇文章是對(duì)JVM 調(diào)優(yōu)的技巧進(jìn)行了總結(jié)和分析。需要的朋友參考下2013-05-05使用Java實(shí)現(xiàn)一個(gè)能保留計(jì)算過(guò)程的計(jì)算器
計(jì)算器是我們?nèi)粘I钪谐S玫墓ぞ咧?它能夠進(jìn)行基本的數(shù)學(xué)運(yùn)算,如加法、減法、乘法和除法,而在設(shè)計(jì)一個(gè)計(jì)算器時(shí),我們可以通過(guò)使用Java編程語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的控制臺(tái)計(jì)算器,并且讓它能夠保留計(jì)算過(guò)程,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11