Java數(shù)據(jù)庫連接池之c3p0簡介_動力節(jié)點Java學(xué)院整理
c3p0是什么
c3p0的出現(xiàn),是為了大大提高應(yīng)用程序和數(shù)據(jù)庫之間訪問效率的。
它的特性:
- 編碼的簡單易用
- 連接的復(fù)用
- 連接的管理
說到c3p0,不得不說一下jdbc本身,c3p0愿意就是對數(shù)據(jù)庫連接的管理,那么原有的概念還是得清晰:DriverManager、Connection、StateMent、ResultMent。
jdbc:java database connective這套API,不用多說,是一套用于連接各式dbms或連接橋接器的api,兩個層級:上層供應(yīng)用方調(diào)用api,下層,定義了各個dbms的spi的api(具體文檔見:這里)。
主要要提的是:datasource、DriverManager,想到哪兒寫到哪兒,datasource是更高級一點的api,原因在于相對對應(yīng)用來說更透明。
Connection:同dbms的邏輯鏈接,類似于session管理概念, SQL statements are executed and results are returned within the context of a connection.
jdbc的概念就到這里,平時用得比較多。
c3P0的配置
c3p0的bean配置如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="checkoutTimeout" value="30000" />
<property name="maxPoolSize" value="15" />
<property name="idleConnectionTestPeriod" value="180" />
<property name="maxIdleTime" value="180" />
</bean>
還有一些配置選項,后續(xù)詳細(xì)說明??梢奵3p0的bean引用使用的是:ComboPooledDataSource,該類結(jié)構(gòu)如下:


以上類圖都不是很完全,不過大體能表達(dá)出類之間的原理:
1、bean:ComboPooledDataSource的父類:AbstractPoolBackedDataSource有一個poolmanager字段,存儲著對pool管理器
2、獲取ds.getConnection()鏈接對象時,內(nèi)部使用getPoolManger()獲取C3p0ConnectionPooledManager(mgr)對象,該manager管理著pool對象:C3P0PooledConnectionPool對象,mgr.getPool().checkoutPooledConnection()
3、自此該connection已經(jīng)被獲取到了
4、讓我們看看該connection的真實面目吧:
ProxyConnection。
5、因此其實原理是:
從pool里獲取到的connection,是proxy包裝的connection,而對connection的釋放或者重用,是pool的管理責(zé)任:初始化池大小,維護(hù)池的大?。╡xpand或shrink),管理unused、expired、checkout、checkin連接。
真正底層的連接是jdbc自己的連接,而c3p0的管理部分,基本上使用的是synchronized關(guān)鍵字,使用timerTask定時器工作。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決子線程無法訪問父線程中通過ThreadLocal設(shè)置的變量問題
這篇文章主要介紹了解決子線程無法訪問父線程中通過ThreadLocal設(shè)置的變量問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
IDEA?報Plugin'maven-resources-plugin:'not?found?
如果在使用?IDEA?時遇到?"Plugin?'maven-resources-plugin:'?not?found"?錯誤,可能是由于?Maven?倉庫中未找到所需的?Maven?插件,近小編給大家分享幾種解決方法,感興趣的朋友跟隨小編一起看看吧2023-07-07
Springboot中的@ConditionalOnBean注解詳細(xì)解讀
這篇文章主要介紹了Springboot中的@ConditionalOnBean注解詳細(xì)解讀,@ConditionalOnMissingBean注解兩個類,一個Computer類,一個配置類,想要完成;如果容器中沒有Computer類,就注入備用電腦Computer類,如果有Computer就不注入,需要的朋友可以參考下2023-11-11
詳解Java并發(fā)編程中的優(yōu)先級隊列PriorityBlockingQueue
PriorityBlockingQueue是Java中實現(xiàn)了堆數(shù)據(jù)結(jié)構(gòu)的線程安全的有界阻塞隊列。本文將會深入解讀PriorityBlockingQueue的源碼實現(xiàn),感興趣的可以了解一下2023-05-05

