基于JDBC的數(shù)據(jù)庫(kù)連接池技術(shù)研究與應(yīng)用
發(fā)布時(shí)間:2008/8/18 0:00:00 訪問(wèn)次數(shù):445
基于b/s(browser/server)架構(gòu)的3層開(kāi)發(fā)模式逐漸取代c/s(client/server)架構(gòu)的開(kāi)發(fā)模式,成為開(kāi)發(fā)企業(yè)級(jí)應(yīng)用和電子商務(wù)普遍采用的技術(shù)。在web應(yīng)用開(kāi)發(fā)的早期,主要使用的技術(shù)是cgi?asp?php等。之后,sun公司推出了基于java語(yǔ)言的servlet+jsp+javabean技術(shù)。相比傳統(tǒng)的開(kāi)發(fā)技術(shù),它具有跨平臺(tái)?安全?有效?可移植等特性,這使其更便于使用和開(kāi)發(fā)。
java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的基本原理
在java語(yǔ)言中,jdbc(java database connection)是應(yīng)用程序與數(shù)據(jù)庫(kù)溝通的橋梁,
即java語(yǔ)言通過(guò)jdbc技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)。jdbc是一種“開(kāi)放”的方案,它為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員?數(shù)據(jù)庫(kù)前臺(tái)工具開(kāi)發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使開(kāi)發(fā)人員可以用純java語(yǔ)言編寫(xiě)完整的數(shù)據(jù)庫(kù)應(yīng)用程序。jdbc提供兩種api,分別是面向開(kāi)發(fā)人員的api和面向底層的jdbc驅(qū)動(dòng)程序api,底層主要通過(guò)直接的jdbc驅(qū)動(dòng)和jdbc-odbc橋驅(qū)動(dòng)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。
一般來(lái)說(shuō),java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程是:
①裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序;
、谕ㄟ^(guò)jdbc建立數(shù)據(jù)庫(kù)連接;
③訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行sql語(yǔ)句;
、軘嚅_(kāi)數(shù)據(jù)庫(kù)連接。
jdbc作為一種數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),具有簡(jiǎn)單易用的優(yōu)點(diǎn)。但使用這種模式進(jìn)行web應(yīng)用
程序開(kāi)發(fā),存在很多問(wèn)題:首先,每一次web請(qǐng)求都要建立一次數(shù)據(jù)庫(kù)連接。建立連接是一個(gè)費(fèi)時(shí)的活動(dòng),每次都得花費(fèi)0.05s~1s的時(shí)間,而且系統(tǒng)還要分配內(nèi)存資源。這個(gè)時(shí)間對(duì)于一次或幾次數(shù)據(jù)庫(kù)操作,或許感覺(jué)不出系統(tǒng)有多大的開(kāi)銷(xiāo)?墒菍(duì)于現(xiàn)在的web應(yīng)用,尤其是大型電子商務(wù)網(wǎng)站,同時(shí)有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作勢(shì)必占用很多的系統(tǒng)資源,網(wǎng)站的響應(yīng)速度必定下降,嚴(yán)重的甚至?xí)斐煞⻊?wù)器的崩潰。不是危言聳聽(tīng),這就是制約某些電子商務(wù)網(wǎng)站發(fā)展的技術(shù)瓶頸問(wèn)題。其次,對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開(kāi)。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將不得不重啟數(shù)據(jù)庫(kù)。還有,這種開(kāi)發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如連接過(guò)多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰。
數(shù)據(jù)庫(kù)連接池(connection pool)的工作原理
1、基本概念及原理
由上面的分析可以看出,問(wèn)題的根源就在于對(duì)數(shù)據(jù)庫(kù)連接資源的低效管理。
我們知道,對(duì)于共享資源,有一個(gè)很著名的設(shè)計(jì)模式:資源池(resource pool)。該模式正是為了解決資源的頻繁分配?釋放所造成的問(wèn)題。為解決上述問(wèn)題,可以采用數(shù)據(jù)庫(kù)連接池技術(shù)。數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。我們可以通過(guò)設(shè)定連接池最大連接數(shù)來(lái)防止系統(tǒng)無(wú)盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們可以通過(guò)連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量?使用情況,為系統(tǒng)開(kāi)發(fā)?測(cè)試及性能調(diào)整提供依據(jù)。
2、服務(wù)器自帶的連接池
jdbc的api中沒(méi)有提供連接池的方法。一些大型的web應(yīng)用服務(wù)器如bea的weblogic和ibm的websphere等提供了連接池的機(jī)制,但是必須有其第三方的專(zhuān)用類(lèi)方法支持連接池的用法。
連接池關(guān)鍵問(wèn)題分析
1、并發(fā)問(wèn)題
為了使連接管理服務(wù)具有最大的通用性,必須考慮多線程環(huán)境,即并發(fā)問(wèn)題。這個(gè)問(wèn)題相對(duì)比較好解決,因?yàn)閖ava語(yǔ)言自身提供了對(duì)并發(fā)管理的支持,使用synchronized關(guān)鍵字即可確保線程是同步的。使用方法為直接在類(lèi)方法前面加上synchronized關(guān)鍵字,如:
public synchronized connection getconnection()
2、多數(shù)據(jù)庫(kù)服務(wù)器和多用戶(hù)
對(duì)于大型的企業(yè)級(jí)應(yīng)用,常常需要同時(shí)連接不同的數(shù)據(jù)庫(kù)(如連接oracle和sybase)。如何連接不同的數(shù)據(jù)庫(kù)呢?我們采用的策略是:設(shè)計(jì)一個(gè)符合單例模式的連接池管理類(lèi),在連接池管理類(lèi)的唯一實(shí)例被創(chuàng)建時(shí)讀取一個(gè)資源文件,其中資源文件中存放著多個(gè)數(shù)據(jù)庫(kù)的url地址()?用戶(hù)名()?密碼()等信息。如tx.url=172.21.15.123:5000/tx_it,tx.user=yang,tx.password=yang321。根據(jù)資源文件提供的信息,創(chuàng)建多個(gè)連接池類(lèi)的實(shí)例,每一個(gè)實(shí)例都是一個(gè)特定數(shù)據(jù)庫(kù)的連接池。連接池管理類(lèi)實(shí)例為每個(gè)連接池實(shí)例取一個(gè)名字,通過(guò)不同的名字來(lái)管理不同的連接池。
對(duì)于同一個(gè)數(shù)據(jù)庫(kù)有多個(gè)用戶(hù)使用不同的名稱(chēng)和密碼訪問(wèn)的情況,也可以通過(guò)資源文件處理,即在資源文件中設(shè)置多個(gè)具有相同url地址,但具有不同用戶(hù)名和密碼的數(shù)據(jù)庫(kù)連接信息。
3、事務(wù)處理
我們知道
基于b/s(browser/server)架構(gòu)的3層開(kāi)發(fā)模式逐漸取代c/s(client/server)架構(gòu)的開(kāi)發(fā)模式,成為開(kāi)發(fā)企業(yè)級(jí)應(yīng)用和電子商務(wù)普遍采用的技術(shù)。在web應(yīng)用開(kāi)發(fā)的早期,主要使用的技術(shù)是cgi?asp?php等。之后,sun公司推出了基于java語(yǔ)言的servlet+jsp+javabean技術(shù)。相比傳統(tǒng)的開(kāi)發(fā)技術(shù),它具有跨平臺(tái)?安全?有效?可移植等特性,這使其更便于使用和開(kāi)發(fā)。
java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的基本原理
在java語(yǔ)言中,jdbc(java database connection)是應(yīng)用程序與數(shù)據(jù)庫(kù)溝通的橋梁,
即java語(yǔ)言通過(guò)jdbc技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)。jdbc是一種“開(kāi)放”的方案,它為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員?數(shù)據(jù)庫(kù)前臺(tái)工具開(kāi)發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使開(kāi)發(fā)人員可以用純java語(yǔ)言編寫(xiě)完整的數(shù)據(jù)庫(kù)應(yīng)用程序。jdbc提供兩種api,分別是面向開(kāi)發(fā)人員的api和面向底層的jdbc驅(qū)動(dòng)程序api,底層主要通過(guò)直接的jdbc驅(qū)動(dòng)和jdbc-odbc橋驅(qū)動(dòng)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。
一般來(lái)說(shuō),java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程是:
、傺b載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序;
、谕ㄟ^(guò)jdbc建立數(shù)據(jù)庫(kù)連接;
、墼L問(wèn)數(shù)據(jù)庫(kù),執(zhí)行sql語(yǔ)句;
、軘嚅_(kāi)數(shù)據(jù)庫(kù)連接。
jdbc作為一種數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),具有簡(jiǎn)單易用的優(yōu)點(diǎn)。但使用這種模式進(jìn)行web應(yīng)用
程序開(kāi)發(fā),存在很多問(wèn)題:首先,每一次web請(qǐng)求都要建立一次數(shù)據(jù)庫(kù)連接。建立連接是一個(gè)費(fèi)時(shí)的活動(dòng),每次都得花費(fèi)0.05s~1s的時(shí)間,而且系統(tǒng)還要分配內(nèi)存資源。這個(gè)時(shí)間對(duì)于一次或幾次數(shù)據(jù)庫(kù)操作,或許感覺(jué)不出系統(tǒng)有多大的開(kāi)銷(xiāo)。可是對(duì)于現(xiàn)在的web應(yīng)用,尤其是大型電子商務(wù)網(wǎng)站,同時(shí)有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作勢(shì)必占用很多的系統(tǒng)資源,網(wǎng)站的響應(yīng)速度必定下降,嚴(yán)重的甚至?xí)斐煞⻊?wù)器的崩潰。不是危言聳聽(tīng),這就是制約某些電子商務(wù)網(wǎng)站發(fā)展的技術(shù)瓶頸問(wèn)題。其次,對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開(kāi)。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將不得不重啟數(shù)據(jù)庫(kù)。還有,這種開(kāi)發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如連接過(guò)多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰。
數(shù)據(jù)庫(kù)連接池(connection pool)的工作原理
1、基本概念及原理
由上面的分析可以看出,問(wèn)題的根源就在于對(duì)數(shù)據(jù)庫(kù)連接資源的低效管理。
我們知道,對(duì)于共享資源,有一個(gè)很著名的設(shè)計(jì)模式:資源池(resource pool)。該模式正是為了解決資源的頻繁分配?釋放所造成的問(wèn)題。為解決上述問(wèn)題,可以采用數(shù)據(jù)庫(kù)連接池技術(shù)。數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。我們可以通過(guò)設(shè)定連接池最大連接數(shù)來(lái)防止系統(tǒng)無(wú)盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們可以通過(guò)連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量?使用情況,為系統(tǒng)開(kāi)發(fā)?測(cè)試及性能調(diào)整提供依據(jù)。
2、服務(wù)器自帶的連接池
jdbc的api中沒(méi)有提供連接池的方法。一些大型的web應(yīng)用服務(wù)器如bea的weblogic和ibm的websphere等提供了連接池的機(jī)制,但是必須有其第三方的專(zhuān)用類(lèi)方法支持連接池的用法。
連接池關(guān)鍵問(wèn)題分析
1、并發(fā)問(wèn)題
為了使連接管理服務(wù)具有最大的通用性,必須考慮多線程環(huán)境,即并發(fā)問(wèn)題。這個(gè)問(wèn)題相對(duì)比較好解決,因?yàn)閖ava語(yǔ)言自身提供了對(duì)并發(fā)管理的支持,使用synchronized關(guān)鍵字即可確保線程是同步的。使用方法為直接在類(lèi)方法前面加上synchronized關(guān)鍵字,如:
public synchronized connection getconnection()
2、多數(shù)據(jù)庫(kù)服務(wù)器和多用戶(hù)
對(duì)于大型的企業(yè)級(jí)應(yīng)用,常常需要同時(shí)連接不同的數(shù)據(jù)庫(kù)(如連接oracle和sybase)。如何連接不同的數(shù)據(jù)庫(kù)呢?我們采用的策略是:設(shè)計(jì)一個(gè)符合單例模式的連接池管理類(lèi),在連接池管理類(lèi)的唯一實(shí)例被創(chuàng)建時(shí)讀取一個(gè)資源文件,其中資源文件中存放著多個(gè)數(shù)據(jù)庫(kù)的url地址()?用戶(hù)名()?密碼()等信息。如tx.url=172.21.15.123:5000/tx_it,tx.user=yang,tx.password=yang321。根據(jù)資源文件提供的信息,創(chuàng)建多個(gè)連接池類(lèi)的實(shí)例,每一個(gè)實(shí)例都是一個(gè)特定數(shù)據(jù)庫(kù)的連接池。連接池管理類(lèi)實(shí)例為每個(gè)連接池實(shí)例取一個(gè)名字,通過(guò)不同的名字來(lái)管理不同的連接池。
對(duì)于同一個(gè)數(shù)據(jù)庫(kù)有多個(gè)用戶(hù)使用不同的名稱(chēng)和密碼訪問(wèn)的情況,也可以通過(guò)資源文件處理,即在資源文件中設(shè)置多個(gè)具有相同url地址,但具有不同用戶(hù)名和密碼的數(shù)據(jù)庫(kù)連接信息。
3、事務(wù)處理
我們知道
熱門(mén)點(diǎn)擊
- 典型ASIC設(shè)計(jì)主要流程
- 基于FPGA和AD1836的I2S接口設(shè)計(jì)
- Agilent推出GENESYS EDA軟件
- 基于Verilog語(yǔ)言的可維護(hù)性設(shè)計(jì)技術(shù)
- PLC可編程序控制器基礎(chǔ)知識(shí)
- 基于FPGA的數(shù)據(jù)無(wú)阻塞交換設(shè)計(jì)
- GE Fanuc發(fā)布支持Xilinx Vir
- 一種針對(duì)功率設(shè)計(jì)SDR的整體方法
- Actel推出新的集成開(kāi)發(fā)環(huán)境Libero
- Ittiam Systems選用Strati
推薦技術(shù)資料
- 聲道前級(jí)設(shè)計(jì)特點(diǎn)
- 與通常的Hi-Fi前級(jí)不同,EP9307-CRZ這臺(tái)分... [詳細(xì)]
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車(chē)用精準(zhǔn)定位
- 高效先進(jìn)封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究