數(shù)據(jù)庫(kù)連接池的控制方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)庫(kù)連接池的控制方法,包括:規(guī)范化線程優(yōu)先級(jí);判斷當(dāng)前連接池是否為空,如果連接池不為空,取出第一個(gè)數(shù)據(jù)連接,設(shè)置當(dāng)前狀態(tài)為忙,返回該數(shù)據(jù)連接;如果連接池為空,判斷當(dāng)前外部程序使用中未歸還的數(shù)據(jù)連接個(gè)數(shù)是否已經(jīng)達(dá)到了連接池內(nèi)最大連接個(gè)數(shù),如果未達(dá)到,增加數(shù)據(jù)連接,并加入當(dāng)前數(shù)據(jù)庫(kù)連接池,返回?cái)?shù)據(jù)庫(kù)連接池的第一個(gè)數(shù)據(jù)連接;如果當(dāng)前外部程序使用中未歸還的數(shù)據(jù)連接個(gè)數(shù)達(dá)到連接池內(nèi)最大連接個(gè)數(shù),設(shè)置當(dāng)前線程的優(yōu)先級(jí),獲取當(dāng)前時(shí)間作為第一時(shí)間,循環(huán)判斷當(dāng)前連接池是否為空,數(shù)據(jù)庫(kù)連接池進(jìn)入等待狀態(tài)。在高并發(fā)、多數(shù)據(jù)源環(huán)境下,有效提高了數(shù)據(jù)訪問(wèn)性能。
【專利說(shuō)明】數(shù)據(jù)庫(kù)連接池的控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)庫(kù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)連接池的控制方法。
【背景技術(shù)】
[0002]信息化應(yīng)用程序一般都要頻繁地訪問(wèn)數(shù)據(jù)庫(kù),典型的一個(gè)業(yè)務(wù)場(chǎng)景如:從數(shù)據(jù)庫(kù)讀取業(yè)務(wù)數(shù)據(jù),組裝成業(yè)務(wù)信息展現(xiàn)給用戶,同時(shí)把用戶對(duì)業(yè)務(wù)信息的修改內(nèi)容保存到數(shù)據(jù)庫(kù)。
[0003]對(duì)于一個(gè)Web應(yīng)用系統(tǒng),應(yīng)用服務(wù)器一般為每一個(gè)客戶端(即一個(gè)會(huì)話,session)訪問(wèn)開(kāi)辟一個(gè)獨(dú)立線程,以提高應(yīng)用系統(tǒng)性能。此時(shí),如果數(shù)據(jù)庫(kù)訪問(wèn)采用單線程的建立、使用、關(guān)閉,就會(huì)嚴(yán)重阻塞多線程執(zhí)行效率,并且,一個(gè)數(shù)據(jù)庫(kù)訪問(wèn)的建立,會(huì)消耗較大的系統(tǒng)資源和時(shí)間,如果頻繁地建立和關(guān)閉數(shù)據(jù)庫(kù)訪問(wèn),會(huì)極大降低系統(tǒng)性能。
[0004]怎樣提升應(yīng)用系統(tǒng)數(shù)據(jù)訪問(wèn)性能,數(shù)據(jù)庫(kù)連接池就是針對(duì)這個(gè)問(wèn)題提出來(lái)的。
[0005]一般地,當(dāng)數(shù)據(jù)庫(kù)連接池建立時(shí),初始化幾個(gè)數(shù)據(jù)連接,等待應(yīng)用程序調(diào)用。應(yīng)用程序調(diào)用一次,就取走一個(gè)數(shù)據(jù)連接,使用完了就歸還數(shù)據(jù)連接。當(dāng)連接池內(nèi)的數(shù)據(jù)連接取完了,就增加新數(shù)據(jù)連接,直到創(chuàng)建連接達(dá)到最大允許連接個(gè)數(shù)。若再取連接時(shí),等待一段時(shí)間,若還沒(méi)有空閑連接就會(huì)拋出異常。這就是一般數(shù)據(jù)庫(kù)連接池的工作原理,采用數(shù)據(jù)庫(kù)連接池技術(shù),能極大提升應(yīng)用系統(tǒng)的數(shù)據(jù)訪問(wèn)性能。
[0006]但是現(xiàn)有技術(shù)中缺少在高并發(fā)、多數(shù)據(jù)源環(huán)境下對(duì)于數(shù)據(jù)庫(kù)連接池的控制方法。
【發(fā)明內(nèi)容】
[0007]本發(fā)明要解決的技術(shù)問(wèn)題是,針對(duì)現(xiàn)有技術(shù)的不足,提供一種數(shù)據(jù)庫(kù)連接池的控制方法,在高并發(fā)、多數(shù)據(jù)源環(huán)境下,有效提高了數(shù)據(jù)訪問(wèn)性能。
[0008]根據(jù)本發(fā)明一個(gè)方面,提供一種數(shù)據(jù)庫(kù)連接池的控制方法,用于對(duì)外提供數(shù)據(jù)連接,包括:
[0009]根據(jù)預(yù)設(shè)的優(yōu)先級(jí)范圍,規(guī)范化傳入的線程優(yōu)先級(jí)參數(shù),得到規(guī)范化參數(shù)優(yōu)先級(jí);
[0010]判斷當(dāng)前連接池是否為空,如果連接池不為空,取出第一個(gè)數(shù)據(jù)連接,設(shè)置當(dāng)前狀態(tài)為忙,返回該數(shù)據(jù)連接;
[0011]如果連接池為空,判斷當(dāng)前外部程序使用中未歸還的數(shù)據(jù)連接個(gè)數(shù)是否已經(jīng)達(dá)到了連接池內(nèi)最大連接個(gè)數(shù),如果未達(dá)到,增加數(shù)據(jù)連接,并加入當(dāng)前數(shù)據(jù)庫(kù)連接池,返回?cái)?shù)據(jù)庫(kù)連接池的第一個(gè)數(shù)據(jù)連接;
[0012]如果當(dāng)前外部程序使用中未歸還的數(shù)據(jù)連接個(gè)數(shù)達(dá)到連接池內(nèi)最大連接個(gè)數(shù),設(shè)置當(dāng)前線程的優(yōu)先級(jí)為規(guī)范化參數(shù)優(yōu)先級(jí),獲取當(dāng)前時(shí)間作為第一時(shí)間,循環(huán)判斷當(dāng)前連接池是否為空,數(shù)據(jù)庫(kù)連接池進(jìn)入等待狀態(tài);
[0013]循環(huán)判斷當(dāng)前連接池是否為空包括:獲取當(dāng)前時(shí)間作為第二時(shí)間,如果第二時(shí)間大于所述第一時(shí)間加上最大等待時(shí)間,則把數(shù)據(jù)連接超時(shí)信息寫(xiě)入日志,并返回空值;如果第二時(shí)間小于第一時(shí)間加上最大等待時(shí)間,數(shù)據(jù)庫(kù)連接池繼續(xù)等待;如果連接池不為空,即有新釋放的數(shù)據(jù)連接時(shí),取出第一個(gè)數(shù)據(jù)連接,設(shè)置數(shù)據(jù)連接狀態(tài)為忙,并返回該數(shù)據(jù)連接。
[0014]可選的,其中,增加數(shù)據(jù)連接包括:
[0015]根據(jù)連接池?cái)U(kuò)展時(shí)每次增加數(shù)據(jù)連接個(gè)數(shù)和當(dāng)前連接池可增加的數(shù)據(jù)連接個(gè)數(shù)進(jìn)行對(duì)比,取其中的最小值作為要增加的數(shù)據(jù)連接數(shù)。
[0016]可選的,所述的數(shù)據(jù)庫(kù)連接池的控制方法還包括:數(shù)據(jù)庫(kù)連接池定期檢查數(shù)據(jù)庫(kù)連接是否有效,如果無(wú)效,會(huì)通知連接池清理數(shù)據(jù)連接。
[0017]可選的,所述的數(shù)據(jù)庫(kù)連接池的控制方法還包括:數(shù)據(jù)庫(kù)連接池定期檢查數(shù)據(jù)庫(kù)連接池大小,如果連接池為空,同時(shí)正在使用的數(shù)據(jù)連接個(gè)數(shù)小于連接池最小數(shù)據(jù)連接個(gè)數(shù),則連接池加大數(shù)據(jù)連接到連接池最小連接個(gè)數(shù)。
[0018]可選的,所述的數(shù)據(jù)庫(kù)連接池的控制方法還包括:數(shù)據(jù)庫(kù)連接池定期檢查數(shù)據(jù)庫(kù)連接配置文件最后修改時(shí)間,如果最后修改時(shí)間在當(dāng)前時(shí)間減去數(shù)據(jù)庫(kù)檢查時(shí)間范圍內(nèi),則數(shù)據(jù)庫(kù)配置文件已被修改,調(diào)用數(shù)據(jù)庫(kù)連接池工廠刷新數(shù)據(jù)庫(kù)連接池配置。
[0019]可選的,所述的數(shù)據(jù)庫(kù)連接池的控制方法還包括:數(shù)據(jù)庫(kù)連接池循環(huán)數(shù)據(jù)庫(kù)連接池內(nèi)的數(shù)據(jù)連接,如果數(shù)據(jù)連接空閑,且空閑時(shí)間大于最大空閑時(shí)間,則關(guān)閉該數(shù)據(jù)連接;
[0020]其中,關(guān)閉數(shù)據(jù)連接包括:將該數(shù)據(jù)庫(kù)連接歸還到數(shù)據(jù)庫(kù)連接池,以便下回外部程序獲取數(shù)據(jù)連接時(shí)能再次取出該連接。
[0021]根據(jù)本發(fā)明另一個(gè)方面,提供一種數(shù)據(jù)庫(kù)連接池的控制方法,用于對(duì)內(nèi)進(jìn)行任務(wù)調(diào)度,包括:
[0022]判斷配置文件是否已經(jīng)修改;
[0023]如果數(shù)據(jù)庫(kù)配置文件有修改,調(diào)用數(shù)據(jù)庫(kù)連接池工廠,刷新當(dāng)前數(shù)據(jù)庫(kù)連接池配置信息,并終止后續(xù)任務(wù)調(diào)度;
[0024]如果數(shù)據(jù)庫(kù)配置文件沒(méi)有修改,則判斷當(dāng)前數(shù)據(jù)庫(kù)連接池內(nèi)的數(shù)據(jù)連接個(gè)數(shù)是否大于O ;如果大于0,則讀取第一個(gè)數(shù)據(jù)連接,并測(cè)試該數(shù)據(jù)連接是否有效;如果測(cè)試數(shù)據(jù)連接無(wú)效,則清除當(dāng)前連接池內(nèi)的所有數(shù)據(jù)連接,重新初始化數(shù)據(jù)連接池并返回;如果測(cè)試數(shù)據(jù)連接有效,則遍歷當(dāng)前數(shù)據(jù)庫(kù)連接池內(nèi)的所有數(shù)據(jù)連接,判斷每一個(gè)數(shù)據(jù)連接是否超過(guò)最大空閑時(shí)間,如果不超過(guò)則取出下一個(gè)數(shù)據(jù)連接,如果超過(guò)最大空閑時(shí)間則從數(shù)據(jù)庫(kù)層釋放該數(shù)據(jù)連接;
[0025]如果連接池內(nèi)數(shù)據(jù)連接個(gè)數(shù)為0,則判斷當(dāng)前外部程序使用的數(shù)據(jù)連接個(gè)數(shù)是否已經(jīng)到達(dá)連接池內(nèi)最小數(shù)據(jù)連接數(shù),如果未達(dá)到連接池內(nèi)最小數(shù)據(jù)連接數(shù),則增加數(shù)據(jù)連接個(gè)數(shù)到達(dá)連接池內(nèi)最小數(shù)據(jù)連接數(shù),并加入當(dāng)前數(shù)據(jù)庫(kù)連接池后返回。
[0026]可選的,其中,測(cè)試數(shù)據(jù)連接是否有效方法包括:根據(jù)當(dāng)前數(shù)據(jù)連接的數(shù)據(jù)庫(kù)類型,采用合適的sql語(yǔ)句進(jìn)行測(cè)試。
[0027]可選的,其中,判斷配置文件是否已經(jīng)修改包括:獲取當(dāng)前時(shí)間和數(shù)據(jù)庫(kù)配置文件的最后修改時(shí)間,如果配置文件的最后修改時(shí)間大于當(dāng)前時(shí)間減去數(shù)據(jù)庫(kù)檢查周期,表示已修改。
[0028]可選的,其中,數(shù)據(jù)庫(kù)配置文件包括:數(shù)據(jù)源名稱、數(shù)據(jù)庫(kù)驅(qū)動(dòng)類名、數(shù)據(jù)庫(kù)訪問(wèn)路徑、連接池內(nèi)最小數(shù)據(jù)連接個(gè)數(shù)、連接池內(nèi)最大數(shù)據(jù)連接個(gè)數(shù)、數(shù)據(jù)庫(kù)檢查周期。[0029]本發(fā)明公開(kāi)是實(shí)施例的優(yōu)點(diǎn)包括:1)在多線程環(huán)境下連接繁忙時(shí),即達(dá)到連接池上限且無(wú)可用連接,能根據(jù)調(diào)用的優(yōu)先級(jí)和等待時(shí)間智能獲取新釋放的連接,即優(yōu)先級(jí)越高、等待時(shí)間越長(zhǎng),越先獲取到即將釋放的數(shù)據(jù)連接,并能自動(dòng)丟棄等待時(shí)間超過(guò)預(yù)先設(shè)置的最大等待時(shí)間的數(shù)據(jù)連接請(qǐng)求。2)能自動(dòng)釋放連接池中空閑時(shí)間超過(guò)預(yù)先設(shè)置的最大空閑時(shí)間的空閑數(shù)據(jù)庫(kù)連接,起到降低系統(tǒng)空閑時(shí)的數(shù)據(jù)庫(kù)和系統(tǒng)的資源占用。3)能自動(dòng)檢測(cè)到連接池中的數(shù)據(jù)庫(kù)當(dāng)前連接狀態(tài),如數(shù)據(jù)庫(kù)正常、數(shù)據(jù)庫(kù)關(guān)閉、網(wǎng)絡(luò)不通等,并能在故障恢復(fù)后,立即恢復(fù)正常連接。3)能在系統(tǒng)運(yùn)行時(shí)自動(dòng)適應(yīng)數(shù)據(jù)庫(kù)配置文件的修改,而不用停止應(yīng)用,這非常適合系統(tǒng)正式上線運(yùn)行時(shí),對(duì)現(xiàn)場(chǎng)數(shù)據(jù)庫(kù)連接性能調(diào)優(yōu)。4)支持多數(shù)據(jù)庫(kù)、多數(shù)據(jù)源的數(shù)據(jù)庫(kù)連接池的智能管理,每一個(gè)數(shù)據(jù)源就是一個(gè)數(shù)據(jù)庫(kù)連接池,一個(gè)數(shù)據(jù)庫(kù)連接池可以管理多個(gè)數(shù)據(jù)庫(kù)連接。使用本發(fā)明,解決了并發(fā)多線程、多數(shù)據(jù)源環(huán)境下的數(shù)據(jù)庫(kù)連接池的智能化管理,極大地提升了應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)訪問(wèn)性能。
【專利附圖】
【附圖說(shuō)明】
[0030]圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)庫(kù)連接池工廠類、數(shù)據(jù)庫(kù)連接池類、數(shù)據(jù)庫(kù)連接類的關(guān)系,以及它們與數(shù)據(jù)庫(kù)配置文件的關(guān)系示意圖;
[0031]圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)庫(kù)連接池的連接獲取方法流程圖;
[0032]圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)庫(kù)連接池的任務(wù)調(diào)度方法流程圖。
【具體實(shí)施方式】
[0033]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。其他實(shí)施方案可以包括結(jié)構(gòu)的、邏輯的、電氣的、過(guò)程的,實(shí)施例僅代表可能的變化。除非明確要求,否則單獨(dú)的組件和功能是可選的,并且操作的順序可以變化。在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。一些實(shí)施方案的部分和特征可以被包括在或替換其他實(shí)施方案的部分和特征。本發(fā)明的實(shí)施方案的范圍包括權(quán)利要求書(shū)的整個(gè)范圍,以及權(quán)利要求書(shū)的所有可獲得的等同物。
[0034]定義
[0035]根據(jù)本發(fā)明一個(gè)實(shí)施例,數(shù)據(jù)庫(kù)配置文件是一個(gè)有固定名稱(例如datasource.properties)和相對(duì)路徑(例如放在源代碼的根目錄)的屬性文件,采用鍵值對(duì)的形式列出每一個(gè)屬性和屬性值。
[0036]如表I所示,屬性內(nèi)容可以包括:數(shù)據(jù)源名稱、數(shù)據(jù)庫(kù)驅(qū)動(dòng)類名、數(shù)據(jù)庫(kù)訪問(wèn)路徑、
[0037]用戶名(可用MD5加密)、用戶密碼(可用MD5加密)、
[0038]連接池內(nèi)最小數(shù)據(jù)連接個(gè)數(shù)(創(chuàng)建連接池時(shí)默認(rèn)創(chuàng)建的數(shù)據(jù)連接個(gè)數(shù),例如1-10)、
[0039]連接池內(nèi)最大數(shù)據(jù)連接個(gè)數(shù)(能創(chuàng)建的最大在線數(shù)據(jù)連接個(gè)數(shù),例如25-250)、
[0040]連接池?cái)U(kuò)展時(shí)每次增加數(shù)據(jù)連接個(gè)數(shù)(例如1-10)、
[0041]最大等待時(shí)間(連接繁忙時(shí),等待數(shù)據(jù)連接超過(guò)該時(shí)間就會(huì)返回空值,例如1000-5000 毫秒)、
[0042]最大空閑時(shí)間(一個(gè)數(shù)據(jù)連接的空閑時(shí)間超過(guò)該值就會(huì)釋放數(shù)據(jù)連接,例如60-120 分鐘)、
[0043]數(shù)據(jù)庫(kù)檢查周期(數(shù)據(jù)庫(kù)連接池的調(diào)度周期,即多長(zhǎng)時(shí)間檢查一次數(shù)據(jù)庫(kù)連接并對(duì)連接池進(jìn)行管理,例如1000-10000毫秒)。
[0044]表1
[0045]
【權(quán)利要求】
1.一種數(shù)據(jù)庫(kù)連接池的控制方法,用于對(duì)外提供數(shù)據(jù)連接,包括: 根據(jù)預(yù)設(shè)的優(yōu)先級(jí)范圍,規(guī)范化傳入的線程優(yōu)先級(jí)參數(shù),得到規(guī)范化參數(shù)優(yōu)先級(jí); 判斷當(dāng)前連接池是否為空,如果連接池不為空,取出第一個(gè)數(shù)據(jù)連接,設(shè)置當(dāng)前狀態(tài)為忙,返回該數(shù)據(jù)連接; 如果連接池為空,判斷當(dāng)前外部程序使用中未歸還的數(shù)據(jù)連接個(gè)數(shù)是否已經(jīng)達(dá)到了連接池內(nèi)最大連接個(gè)數(shù),如果未達(dá)到,增加數(shù)據(jù)連接,并加入當(dāng)前數(shù)據(jù)庫(kù)連接池,返回?cái)?shù)據(jù)庫(kù)連接池的第一個(gè)數(shù)據(jù)連接; 如果當(dāng)前外部程序使用中未歸還的數(shù)據(jù)連接個(gè)數(shù)達(dá)到連接池內(nèi)最大連接個(gè)數(shù),設(shè)置當(dāng)前線程的優(yōu)先級(jí)為規(guī)范化參數(shù)優(yōu)先級(jí),獲取當(dāng)前時(shí)間作為第一時(shí)間,循環(huán)判斷當(dāng)前連接池是否為空,數(shù)據(jù)庫(kù)連接池進(jìn)入等待狀態(tài); 循環(huán)判斷當(dāng)前連接池是否為空包括:獲取當(dāng)前時(shí)間作為第二時(shí)間,如果第二時(shí)間大于所述第一時(shí)間加上最大等待時(shí)間,則把數(shù)據(jù)連接超時(shí)信息寫(xiě)入日志,并返回空值;如果第二時(shí)間小于第一時(shí)間加上最大等待時(shí)間,數(shù)據(jù)庫(kù)連接池繼續(xù)等待;如果連接池不為空,即有新釋放的數(shù)據(jù)連接時(shí),取出第一個(gè)數(shù)據(jù)連接,設(shè)置數(shù)據(jù)連接狀態(tài)為忙,并返回該數(shù)據(jù)連接。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫(kù)連接池的控制方法,其中,增加數(shù)據(jù)連接包括: 根據(jù)連接池?cái)U(kuò)展時(shí)每次增加數(shù)據(jù)連接個(gè)數(shù)和當(dāng)前連接池可增加的數(shù)據(jù)連接個(gè)數(shù)進(jìn)行對(duì)比,取其中的最小值作為要增加的數(shù)據(jù)連接數(shù)。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫(kù)連接池的控制方法,還包括:數(shù)據(jù)庫(kù)連接池定期檢查數(shù)據(jù)庫(kù)連接是否有效,如果無(wú)效,會(huì)通知連接池清理數(shù)據(jù)連接。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫(kù)連接池的控制方法,還包括:數(shù)據(jù)庫(kù)連接池定期檢查數(shù)據(jù)庫(kù)連接池大小,如果連接池為空,同時(shí)正在使用的數(shù)據(jù)連接個(gè)數(shù)小于連接池最小數(shù)據(jù)連接個(gè)數(shù),則連接池加大數(shù)據(jù)連接到連接池最小連接個(gè)數(shù)。
5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫(kù)連接池的控制方法,還包括:數(shù)據(jù)庫(kù)連接池定期檢查數(shù)據(jù)庫(kù)連接配置文件最后修改時(shí)間,如果最后修改時(shí)間在當(dāng)前時(shí)間減去數(shù)據(jù)庫(kù)檢查時(shí)間范圍內(nèi),則數(shù)據(jù)庫(kù)配置文件已被修改,調(diào)用數(shù)據(jù)庫(kù)連接池工廠刷新數(shù)據(jù)庫(kù)連接池配置。
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫(kù)連接池的控制方法,還包括:數(shù)據(jù)庫(kù)連接池循環(huán)數(shù)據(jù)庫(kù)連接池內(nèi)的數(shù)據(jù)連接,如果數(shù)據(jù)連接空閑,且空閑時(shí)間大于最大空閑時(shí)間,則關(guān)閉該數(shù)據(jù)連接; 其中,關(guān)閉數(shù)據(jù)連接包括:將該數(shù)據(jù)庫(kù)連接歸還到數(shù)據(jù)庫(kù)連接池,以便下回外部程序獲取數(shù)據(jù)連接時(shí)能再次取出該連接。
7.一種數(shù)據(jù)庫(kù)連接池的控制方法,用于對(duì)內(nèi)進(jìn)行任務(wù)調(diào)度,包括: 判斷配置文件是否已經(jīng)修改; 如果數(shù)據(jù)庫(kù)配置文件有修改,調(diào)用數(shù)據(jù)庫(kù)連接池工廠,刷新當(dāng)前數(shù)據(jù)庫(kù)連接池配置信息,并終止后續(xù)任務(wù)調(diào)度; 如果數(shù)據(jù)庫(kù)配置文件沒(méi)有修改,則判斷當(dāng)前數(shù)據(jù)庫(kù)連接池內(nèi)的數(shù)據(jù)連接個(gè)數(shù)是否大于O;如果大于O,則讀取第一個(gè)數(shù)據(jù)連接,并測(cè)試該數(shù)據(jù)連接是否有效;如果測(cè)試數(shù)據(jù)連接無(wú)效,則清除當(dāng)前連接池內(nèi)的所有數(shù)據(jù)連接,重新初始化數(shù)據(jù)連接池并返回;如果測(cè)試數(shù)據(jù)連接有效,則遍歷當(dāng)前數(shù)據(jù)庫(kù)連接池內(nèi)的所有數(shù)據(jù)連接,判斷每一個(gè)數(shù)據(jù)連接是否超過(guò)最大空閑時(shí)間,如果不超過(guò)則取出下一個(gè)數(shù)據(jù)連接,如果超過(guò)最大空閑時(shí)間則從數(shù)據(jù)庫(kù)層釋放該數(shù)據(jù)連接; 如果連接池內(nèi)數(shù)據(jù)連接個(gè)數(shù)為O,則判斷當(dāng)前外部程序使用的數(shù)據(jù)連接個(gè)數(shù)是否已經(jīng)到達(dá)連接池內(nèi)最小數(shù)據(jù)連接數(shù),如果未達(dá)到連接池內(nèi)最小數(shù)據(jù)連接數(shù),則增加數(shù)據(jù)連接個(gè)數(shù)到達(dá)連接池內(nèi)最小數(shù)據(jù)連接數(shù),并加入當(dāng)前數(shù)據(jù)庫(kù)連接池后返回。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫(kù)連接池的控制方法,測(cè)試數(shù)據(jù)連接是否有效方法包括:根據(jù)當(dāng)前數(shù)據(jù)連接的數(shù)據(jù)庫(kù)類型,采用合適的sql語(yǔ)句進(jìn)行測(cè)試。
9.根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫(kù)連接池的控制方法,判斷配置文件是否已經(jīng)修改包括: 獲取當(dāng)前時(shí)間和數(shù)據(jù)庫(kù)配置文件的最后修改時(shí)間,如果配置文件的最后修改時(shí)間大于當(dāng)前時(shí)間減去數(shù)據(jù)庫(kù)檢查周期,表示已修改。
10.根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫(kù)連接池的控制方法,其中,數(shù)據(jù)庫(kù)配置文件包括: 數(shù)據(jù)源名稱、數(shù)據(jù)庫(kù)驅(qū)動(dòng)類名、數(shù)據(jù)庫(kù)訪問(wèn)路徑、連接池內(nèi)最小數(shù)據(jù)連接個(gè)數(shù)、連接池內(nèi)最大數(shù)據(jù)連接個(gè)數(shù)、數(shù)據(jù)`庫(kù)檢查周期。
【文檔編號(hào)】G06F9/48GK103605571SQ201310586676
【公開(kāi)日】2014年2月26日 申請(qǐng)日期:2013年11月20日 優(yōu)先權(quán)日:2013年11月20日
【發(fā)明者】陳清水, 李海, 劉紅超, 張健 申請(qǐng)人:國(guó)家電網(wǎng)公司, 北京許繼電氣有限公司