專利名稱:數(shù)據(jù)庫連接管理方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù),尤其涉及一種數(shù)據(jù)庫連接管理方法和裝置。
背景技術(shù):
Java是一種可以編寫跨平臺的應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,Java技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機(jī)、移動電話和互聯(lián)網(wǎng)等領(lǐng)域。在基于Java的應(yīng)用系統(tǒng)中,尤其是面向企業(yè)用戶的應(yīng)用系統(tǒng),數(shù)據(jù)庫訪問是關(guān)鍵技術(shù)之一。數(shù)據(jù)庫連接是一種關(guān)鍵的有限且昂貴的資源,連接數(shù)據(jù)庫是一種既消耗資源又費時的工作,如果頻繁進(jìn)行數(shù)據(jù)庫操作,系統(tǒng)的性能將會急劇下降。為了改善系統(tǒng)性能,提出了數(shù)據(jù)庫連接池的概念;數(shù)據(jù)庫連接池負(fù)責(zé)分配、 管理和釋放數(shù)據(jù)庫連接,其在初始化時將在數(shù)據(jù)庫連接池中創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接; 這些數(shù)據(jù)庫連接的數(shù)量是由最小數(shù)據(jù)庫連接數(shù)來設(shè)定的,同時設(shè)定數(shù)據(jù)庫連接池的最大連接數(shù),以防止應(yīng)用系統(tǒng)與數(shù)據(jù)庫的無限連接。當(dāng)某個業(yè)務(wù)需要訪問數(shù)據(jù)庫時,只需從數(shù)據(jù)庫連接池中取出一個數(shù)據(jù)庫連接,無需重新建立數(shù)據(jù)庫連接,且使用完畢后再將該數(shù)據(jù)庫連接放回數(shù)據(jù)庫連接池中,使其可以被其他業(yè)務(wù)使用。通過復(fù)用數(shù)據(jù)庫連接,從而可以避免數(shù)據(jù)庫連接的頻繁建立、關(guān)閉所帶來的系統(tǒng)資源開銷,節(jié)省了系統(tǒng)資源和時間。在應(yīng)用系統(tǒng)中,通常存在一些業(yè)務(wù)相對于其他業(yè)務(wù)來說更加重要,有一些業(yè)務(wù)更可能需要提供不間斷的服務(wù)。當(dāng)系統(tǒng)負(fù)載較大導(dǎo)致數(shù)據(jù)庫連接池中的數(shù)據(jù)庫連接用完時, 這些重要業(yè)務(wù)將因無法獲得數(shù)據(jù)庫連接而暫時不可用,直到有可用的數(shù)據(jù)庫連接時才恢復(fù),這樣將導(dǎo)致重要業(yè)務(wù)在高負(fù)載情況下的可用性降低。圖I為現(xiàn)有技術(shù)中數(shù)據(jù)庫連接的應(yīng)用場景示意圖,如圖I所示,現(xiàn)有技術(shù)中分別為重要業(yè)務(wù)和普通業(yè)務(wù)分配一個數(shù)據(jù)庫連接池,將普通業(yè)務(wù)使用的數(shù)據(jù)庫連接池設(shè)置為數(shù)據(jù)庫連接池1,將重要業(yè)務(wù)使用的數(shù)據(jù)庫連接池設(shè)置為數(shù)據(jù)庫連接池2,這樣使得普通業(yè)務(wù)對數(shù)據(jù)庫連接的占用不會對重要業(yè)務(wù)造成影響。然而,當(dāng)重要業(yè)務(wù)的負(fù)載較高,而普通業(yè)務(wù)的負(fù)載較低時,用于普通業(yè)務(wù)的數(shù)據(jù)庫連接池中的空閑數(shù)據(jù)庫連接不能供重要業(yè)務(wù)使用,因此現(xiàn)有技術(shù)無法充分利用數(shù)據(jù)庫連接。
發(fā)明內(nèi)容
本發(fā)明提供一種數(shù)據(jù)庫連接管理方法和裝置,在優(yōu)先保證重要業(yè)務(wù)能夠獲取到數(shù)據(jù)庫連接的同時,充分利用數(shù)據(jù)庫連接。本發(fā)明的第一個方面是提供一種數(shù)據(jù)庫連接管理方法,包括當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù);若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),則獲取運行所述業(yè)務(wù)的線程的線程屬性;
當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。本發(fā)明的另一個方面是提供一種數(shù)據(jù)庫連接管理裝置,包括第一獲取模塊,用于當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù);第二獲取模塊,用于若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),獲取運行所述業(yè)務(wù)的線程的線程屬性;分配模塊,用于當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。本發(fā)明的技術(shù)效果是當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取該數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù),若最大連接數(shù)與當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,獲取運行該業(yè)務(wù)的線程屬性,當(dāng)該線程屬性滿足預(yù)設(shè)的屬性條件時,從數(shù)據(jù)庫連接池中為業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)進(jìn)行更新。本發(fā)明在優(yōu)先保證重要業(yè)務(wù)能夠獲取到數(shù)據(jù)庫連接的同時,充分利用了數(shù)據(jù)庫連接,提高了應(yīng)用系統(tǒng)中重要業(yè)務(wù)的可用性。
圖
圖
圖
圖
圖
圖
I為現(xiàn)有技術(shù)中數(shù)據(jù)庫連接的應(yīng)用場景示意2為本發(fā)明數(shù)據(jù)庫連接管理方法實施例一的流程3為本發(fā)明數(shù)據(jù)庫連接管理方法實施例一中數(shù)據(jù)庫連接的應(yīng)用場景示意圖; 4為本發(fā)明數(shù)據(jù)庫連接管理方法實施例二的流程5為本發(fā)明數(shù)據(jù)庫連接管理裝置實施例一的結(jié)構(gòu)6為本發(fā)明數(shù)據(jù)庫連接管理裝置實施例二的結(jié)構(gòu)圖。
具體實施例方式圖2為本發(fā)明數(shù)據(jù)庫連接管理方法實施例一的流程圖,如圖2所示,本實施例提供了一種數(shù)據(jù)庫連接管理方法,可以具體包括如下步驟步驟201,當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù)。圖3為本發(fā)明數(shù)據(jù)庫連接管理方法實施例一中數(shù)據(jù)庫連接的應(yīng)用場景示意圖,如圖3所示,本實施例為了優(yōu)先保證重要業(yè)務(wù)可以獲取到數(shù)據(jù)庫連接,同時避免現(xiàn)有技術(shù)中存在的數(shù)據(jù)庫連接利用不充分的缺陷,本實施例中普通業(yè)務(wù)和重要業(yè)務(wù)共享一個數(shù)據(jù)庫連接池,處理各業(yè)務(wù)的所有功能模塊均從統(tǒng)一的數(shù)據(jù)庫連接池中獲取數(shù)據(jù)庫連接,而無需關(guān)心數(shù)據(jù)庫連接如何分配。本步驟具體為當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,先獲取該數(shù)據(jù)庫連接池的最大連接數(shù),以及該數(shù)據(jù)庫連接池中當(dāng)前已使用的連接數(shù)。其中,數(shù)據(jù)庫連接池的最大連接數(shù)可以為提前配置或分配好的,此處可以假設(shè)X為最大連接數(shù),當(dāng)前已使用的連接數(shù)是在每次分配數(shù)據(jù)庫連接后不斷更新得到的,用于表示該數(shù)據(jù)庫連接池中已經(jīng)被使用的數(shù)據(jù)庫連接的數(shù)量,此處可以假設(shè)U為當(dāng)前已使用的連接數(shù)。步驟202,若所述最大連接數(shù)與當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),則獲取運行所述業(yè)務(wù)的線程的線程屬性。當(dāng)獲取到數(shù)據(jù)庫連接池的最大連接數(shù)X和當(dāng)前已使用的連接數(shù)U之后,判斷最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差是否大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),其中,重要業(yè)務(wù)的保留連接數(shù)是指為了保證重要業(yè)務(wù)盡量為重要業(yè)務(wù)優(yōu)先分配數(shù)據(jù)庫連接,而預(yù)先設(shè)定的數(shù)據(jù)庫連接池中為重要業(yè)務(wù)保留的連接數(shù),此處假設(shè)R為預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)。本步驟為經(jīng)過判斷,若最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差小于或等于重要業(yè)務(wù)的保留連接數(shù)R時,表明當(dāng)前數(shù)據(jù)庫連接池中可用的連接數(shù)已經(jīng)達(dá)到連接數(shù)上限,則此時獲取運行該業(yè)務(wù)的線程的線程屬性。此處的線性屬性可以具體為線性名稱、線程類型等。步驟203,當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。在本實施例中,針對重要業(yè)務(wù)來說,為其建立專用線程,且通過線程的線程屬性來標(biāo)識其為專用線程,以與運行普通業(yè)務(wù)的線程相區(qū)別。在本實施例中,若最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差小于或等于重要業(yè)務(wù)的保留連接數(shù)R時,進(jìn)一步判斷該業(yè)務(wù)的線程屬性是否滿足預(yù)設(shè)的屬性條件,如果是,則從該數(shù)據(jù)庫連接池中為該業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)U進(jìn)行更新。此處的預(yù)設(shè)的屬性條件具體可以為線程屬性的前綴,或者其他的標(biāo)識信息,通過線程屬性來標(biāo)識業(yè)務(wù)為普通業(yè)務(wù)或重要業(yè)務(wù)。當(dāng)該線程屬性符合預(yù)設(shè)的屬性條件時,表明該業(yè)務(wù)為重要業(yè)務(wù),則從所述數(shù)據(jù)庫連接池中為該業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)U進(jìn)行更新,即將已使用的連接數(shù)U進(jìn)行加I處理。進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理方法還可以包括如下步驟若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),則從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理方法還可以包括如下步驟當(dāng)所述線程屬性不滿足預(yù)設(shè)的屬性條件時,等待所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,才為所述業(yè)務(wù)分配數(shù)據(jù)庫連接。更進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理方法還可以包括如下步驟根據(jù)不同業(yè)務(wù)的性質(zhì)將各業(yè)務(wù)劃分為重要業(yè)務(wù)和普通業(yè)務(wù);為所述重要業(yè)務(wù)建立專用線程,并將所述專用線程的線程屬性統(tǒng)一為預(yù)設(shè)屬性。更進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理方法還可以包括如下步驟當(dāng)完成所述業(yè)務(wù)的執(zhí)行處理后,將為所述業(yè)務(wù)分配的數(shù)據(jù)庫連接釋放到所述數(shù)據(jù)庫連接池中,并更新所述當(dāng)前已使用的連接數(shù)。本實施例提供了一種數(shù)據(jù)庫連接管理方法,當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取該數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù),若最大連接數(shù)與當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,獲取運行該業(yè)務(wù)的線程屬性,當(dāng)該線程屬性滿足預(yù)設(shè)的屬性條件時,從數(shù)據(jù)庫連接池中為業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)進(jìn)行更新。本實施例在優(yōu)先保證重要業(yè)務(wù)能夠獲取到數(shù)據(jù)庫連接的同時,充分利用了數(shù)據(jù)庫連接,提高了應(yīng)用系統(tǒng)中重要業(yè)務(wù)的可用性。圖4為本發(fā)明數(shù)據(jù)庫連接管理方法實施例二的流程圖,如圖4所示,本實施例提供了一種數(shù)據(jù)庫連接管理方法,可以具體包括如下步驟
步驟401,根據(jù)不同業(yè)務(wù)的性質(zhì)將各業(yè)務(wù)劃分為重要業(yè)務(wù)和普通業(yè)務(wù)。在本實施例中,為了優(yōu)先保證為重要業(yè)務(wù)分配數(shù)據(jù)庫連接,可以先根據(jù)不同業(yè)務(wù)的性質(zhì)對各業(yè)務(wù)進(jìn)行劃分,將其劃分為重要業(yè)務(wù)和普通業(yè)務(wù)。步驟402,為所述重要業(yè)務(wù)建立專用線程,并將所述專用線程的名稱的前綴統(tǒng)一為預(yù)設(shè)前綴。在本實施例中,用于標(biāo)識專用線程的線程屬性具體為線程名稱,采用線程類型標(biāo)識專用線程與此類似,此處不再贅述。本實施例為重要業(yè)務(wù)建立專用線程,這些專用線程專用于運行重要業(yè)務(wù),參照上述圖3,重要業(yè)務(wù)直接加入重要業(yè)務(wù)處理線程I、重要業(yè)務(wù)處理線程2中進(jìn)行處理。在本實施例中,將這些專用線程的名稱的前綴統(tǒng)一為預(yù)設(shè)前綴,,例如, 將專用于重要業(yè)務(wù)的線程均配置為以impt開頭。本實施例通過對重要業(yè)務(wù)的處理代碼進(jìn)行改進(jìn),在程序入口處將重要業(yè)務(wù)交給專用線程處理?,F(xiàn)有技術(shù)中為順序調(diào)用重要業(yè)務(wù)的處理代碼functionl和function2,而本實施例中對上述代碼進(jìn)行改進(jìn),將重要業(yè)務(wù)的處理代碼functionl和function2設(shè)置在前綴統(tǒng)一的專用線程中進(jìn)行處理。步驟403,當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù)。本實施例中普通業(yè)務(wù)和重要業(yè)務(wù)共享一個數(shù)據(jù)庫連接池,處理各業(yè)務(wù)的所有功能模塊均從統(tǒng)一的數(shù)據(jù)庫連接池中獲取數(shù)據(jù)庫連接。本步驟具體為當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,先獲取該數(shù)據(jù)庫連接池的最大連接數(shù),以及該數(shù)據(jù)庫連接池中當(dāng)前已使用的連接數(shù)。其中,數(shù)據(jù)路連接池的最大連接數(shù)可以為提前配置或分配好的,此處可以假設(shè)X為最大連接數(shù),當(dāng)前已使用的連接數(shù)是在每次分配數(shù)據(jù)庫連接后不斷更新得到的,用于表示該數(shù)據(jù)庫連接池中已經(jīng)被使用的數(shù)據(jù)庫連接的數(shù)量,此處可以假設(shè)U為當(dāng)前已使用的連接數(shù)。步驟404,判斷最大連接數(shù)與當(dāng)前已使用的連接數(shù)之差是否大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),如果是,則執(zhí)行步驟405,否則執(zhí)行步驟406。本步驟為判斷數(shù)據(jù)庫連接池的最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差是否大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)R,如果是,則執(zhí)行步驟405,否則執(zhí)行步驟406。步驟405,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。當(dāng)數(shù)據(jù)庫連接池的最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)R時,表明該數(shù)據(jù)庫連接池中的連接數(shù)尚未達(dá)到上限,則無論該業(yè)務(wù)為重要業(yè)務(wù)或普通業(yè)務(wù),均從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)U進(jìn)行更新,具體為將U進(jìn)行加I處理,以備對下一個業(yè)務(wù)進(jìn)行連接分配時使用。另外,在本實施例中,當(dāng)數(shù)據(jù)庫連接池的最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U 之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)R,且該業(yè)務(wù)為重要業(yè)務(wù)時,也執(zhí)行本步驟 405,從數(shù)據(jù)庫連接池中為重要業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)U進(jìn)行更新,具體為將U進(jìn)行加I處理。也就是說,對于重要業(yè)務(wù)來說,即使數(shù)據(jù)庫連接池中已使用的連接數(shù)已達(dá)到上限,但由于之前為重要業(yè)務(wù)保留了 R個連接數(shù),則仍然為重要業(yè)務(wù)分配一個數(shù)據(jù)庫連接,以優(yōu)先保證重要業(yè)務(wù)的可用性。
步驟406,獲取運行所述業(yè)務(wù)的線程的線程名稱。當(dāng)數(shù)據(jù)庫連接池的最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)R時,表明該數(shù)據(jù)庫連接池中的連接數(shù)已達(dá)到上限,則本步驟先獲取運行該業(yè)務(wù)的線程的線程名稱。步驟407,判斷該線程名稱的前綴是否為預(yù)設(shè)前綴,如果是,返回執(zhí)行步驟405,否則執(zhí)行步驟408。本步驟為判斷運行該業(yè)務(wù)的線程的線程名稱是否滿足名稱條件,此處具體為判斷該線程名稱的前綴是否為預(yù)設(shè)前綴,如果是,則表明該業(yè)務(wù)為重要業(yè)務(wù),則返回執(zhí)行步驟 405,為該重要業(yè)務(wù)分配一個數(shù)據(jù)庫連接,否則執(zhí)行步驟408。步驟408,等待所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,才為所述業(yè)務(wù)分配數(shù)據(jù)庫連接。當(dāng)數(shù)據(jù)庫連接池的最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)R,且通過上述步驟407的判斷,獲知運行該業(yè)務(wù)的線程的線程名稱的前綴不是預(yù)設(shè)前綴,即該業(yè)務(wù)為普通業(yè)務(wù)時,先不為該業(yè)務(wù)分配數(shù)據(jù)庫連接,而是等待最大連接數(shù)X與當(dāng)前已使用的連接數(shù)U之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)R時,才為業(yè)務(wù)分配數(shù)據(jù)庫連接。步驟409,當(dāng)完成所述業(yè)務(wù)的執(zhí)行處理后,將為所述業(yè)務(wù)分配的數(shù)據(jù)庫連接釋放到所述數(shù)據(jù)庫連接池中,并更新所述當(dāng)前已使用的連接數(shù)。在本實施例中,當(dāng)執(zhí)行完成一個業(yè)務(wù)時,還可以將為該業(yè)務(wù)分配的數(shù)據(jù)庫連接釋放到數(shù)據(jù)庫連接池中,此時更新當(dāng)前已使用的連接數(shù)U,具體為將當(dāng)前已使用的連接數(shù)進(jìn)行減I處理。本實施例提供了一種數(shù)據(jù)庫連接管理方法,當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取該數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù),若最大連接數(shù)與當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,獲取運行該業(yè)務(wù)的線程名稱,當(dāng)該線程名稱滿足預(yù)設(shè)的名稱條件時,從數(shù)據(jù)庫連接池中為業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)進(jìn)行更新。本實施例在優(yōu)先保證重要業(yè)務(wù)能夠獲取到數(shù)據(jù)庫連接的同時,充分利用了數(shù)據(jù)庫連接,提高了應(yīng)用系統(tǒng)中重要業(yè)務(wù)的可用性。在本實施例中,當(dāng)應(yīng)用系統(tǒng)的負(fù)載較小時,重要業(yè)務(wù)和普通業(yè)務(wù)可以共享數(shù)據(jù)庫連接池中的數(shù)據(jù)庫連接;當(dāng)負(fù)載增大到剩余連接數(shù)小于或等于R時,只有重要業(yè)務(wù)才能繼續(xù)獲取到數(shù)據(jù)庫連接,普通業(yè)務(wù)將被阻塞,即數(shù)據(jù)庫連接池中的最后R個數(shù)據(jù)庫連接只供重要業(yè)務(wù)使用。在重要業(yè)務(wù)極端繁忙的情況下,也可以將數(shù)據(jù)庫連接池中的所有數(shù)據(jù)庫連接均用于重要業(yè)務(wù),這時普通業(yè)務(wù)無法獲取到數(shù)據(jù)庫連接,但重要業(yè)務(wù)仍可以獲取到數(shù)據(jù)庫連接,最大程度上保障了重要業(yè)務(wù)的可用性。在本實施例中,只需對應(yīng)用系統(tǒng)中重要業(yè)務(wù)的入口進(jìn)行改進(jìn),并對數(shù)據(jù)庫連接池的相關(guān)參數(shù)進(jìn)行配置,對業(yè)務(wù)的具體處理過程是透明的,能夠很好地適應(yīng)業(yè)務(wù)變更;當(dāng)重要業(yè)務(wù)變更為普通業(yè)務(wù),或者普通業(yè)務(wù)變更為重要業(yè)務(wù)時,只需在業(yè)務(wù)入口做少量修改即可。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。圖5為本發(fā)明數(shù)據(jù)庫連接管理裝置實施例一的結(jié)構(gòu)圖,如圖5所示,本實施例提供了一種數(shù)據(jù)庫連接管理裝置,可以具體執(zhí)行上述方法實施例一中的各個步驟,此處不再贅述。本實施例提供的數(shù)據(jù)庫連接管理裝置可以具體包括第一獲取模塊501、第二獲取模塊502和分配模塊503。其中,第一獲取模塊501用于當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù)。第二獲取模塊 502用于若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),獲取運行所述業(yè)務(wù)的線程的線程屬性。分配模塊503用于當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。圖6為本發(fā)明數(shù)據(jù)庫連接管理裝置實施例二的結(jié)構(gòu)圖,如圖6所示,本實施例提供了一種數(shù)據(jù)庫連接管理裝置,可以具體執(zhí)行上述方法實施例二中的各個步驟,此處不再贅述。本實施例提供的數(shù)據(jù)庫連接管理裝置在上述圖5所示的基礎(chǔ)之上,分配模塊503還用于若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù), 從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理裝置還可以包括等待分配模塊601,等待分配模塊601用于當(dāng)所述線程屬性不滿足預(yù)設(shè)的屬性條件時,等待所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,才為所述業(yè)務(wù)分配數(shù)據(jù)庫連接。進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理裝置還可以包括劃分模塊602和建立模塊603。其中,劃分模塊602用于根據(jù)不同業(yè)務(wù)的性質(zhì)將各業(yè)務(wù)劃分為重要業(yè)務(wù)和普通業(yè)務(wù)。建立模塊603用于為所述重要業(yè)務(wù)建立專用線程,并將所述專用線程的線程屬性統(tǒng)一為預(yù)設(shè)屬性。更進(jìn)一步地,本實施例提供的數(shù)據(jù)庫連接管理裝置還可以包括釋放模塊604,釋放模塊604用于當(dāng)完成所述業(yè)務(wù)的執(zhí)行處理后,將為所述業(yè)務(wù)分配的數(shù)據(jù)庫連接釋放到所述數(shù)據(jù)庫連接池中,并更新所述當(dāng)前已使用的連接數(shù)。本實施例提供了一種數(shù)據(jù)庫連接管理裝置,當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取該數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù),若最大連接數(shù)與當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,獲取運行該業(yè)務(wù)的線程屬性,當(dāng)該線程屬性滿足預(yù)設(shè)的屬性條件時,從數(shù)據(jù)庫連接池中為業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對已使用的連接數(shù)進(jìn)行更新。本實施例在優(yōu)先保證重要業(yè)務(wù)能夠獲取到數(shù)據(jù)庫連接的同時,充分利用了數(shù)據(jù)庫連接,提高了應(yīng)用系統(tǒng)中重要業(yè)務(wù)的可用性。最后應(yīng)說明的是以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制; 盡管參照前述各實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。
權(quán)利要求
1.一種數(shù)據(jù)庫連接管理方法,其特征在于,包括當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù);若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),則獲取運行所述業(yè)務(wù)的線程的線程屬性;當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),則從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,還包括當(dāng)所述線程屬性不滿足預(yù)設(shè)的屬性條件時,等待所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,才為所述業(yè)務(wù)分配數(shù)據(jù)庫連接。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括根據(jù)不同業(yè)務(wù)的性質(zhì)將各業(yè)務(wù)劃分為重要業(yè)務(wù)和普通業(yè)務(wù);為所述重要業(yè)務(wù)建立專用線程,并將所述專用線程的線性屬性統(tǒng)一為預(yù)設(shè)屬性。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括當(dāng)完成所述業(yè)務(wù)的執(zhí)行處理后,將為所述業(yè)務(wù)分配的數(shù)據(jù)庫連接釋放到所述數(shù)據(jù)庫連接池中,并更新所述當(dāng)前已使用的連接數(shù)。
6.一種數(shù)據(jù)庫連接管理裝置,其特征在于,包括第一獲取模塊,用于當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù);第二獲取模塊,用于若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),獲取運行所述業(yè)務(wù)的線程的線程屬性;分配模塊,用于當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述分配模塊還用于若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,還包括等待分配模塊,用于當(dāng)所述線程屬性不滿足預(yù)設(shè)的屬性條件時,等待所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差大于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù)時,才為所述業(yè)務(wù)分配數(shù)據(jù)庫連接。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,還包括劃分模塊,用于根據(jù)不同業(yè)務(wù)的性質(zhì)將各業(yè)務(wù)劃分為重要業(yè)務(wù)和普通業(yè)務(wù);建立模塊,用于為所述重要業(yè)務(wù)建立專用線程,并將所述專用線程的線程屬性統(tǒng)一為預(yù)設(shè)屬性。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,還包括釋放模塊,用于當(dāng)完成所述業(yè)務(wù)的執(zhí)行處理后,將為所述業(yè)務(wù)分配的數(shù)據(jù)庫連接釋放到所述數(shù)據(jù)庫連接池中,并更新所述當(dāng)前已使用的連接數(shù)。
全文摘要
本發(fā)明提供一種數(shù)據(jù)庫連接管理方法和裝置,方法包括當(dāng)一個業(yè)務(wù)需要從數(shù)據(jù)庫連接池獲取連接時,獲取所述數(shù)據(jù)庫連接池的最大連接數(shù)以及當(dāng)前已使用的連接數(shù);若所述最大連接數(shù)與所述當(dāng)前已使用的連接數(shù)之差小于或等于預(yù)設(shè)的重要業(yè)務(wù)的保留連接數(shù),則獲取運行所述業(yè)務(wù)的線程的線程屬性;當(dāng)所述線程屬性滿足預(yù)設(shè)的屬性條件時,從所述數(shù)據(jù)庫連接池中為所述業(yè)務(wù)分配一個數(shù)據(jù)庫連接,并對所述已使用的連接數(shù)進(jìn)行更新。裝置包括第一獲取模塊、第二獲取模塊和分配模塊。本發(fā)明在優(yōu)先保證重要業(yè)務(wù)能夠獲取到數(shù)據(jù)庫連接的同時,充分利用了數(shù)據(jù)庫連接,提高了應(yīng)用系統(tǒng)中重要業(yè)務(wù)的可用性。
文檔編號G06F17/30GK102609467SQ20121001311
公開日2012年7月25日 申請日期2012年1月16日 優(yōu)先權(quán)日2012年1月16日
發(fā)明者楊科 申請人:北京星網(wǎng)銳捷網(wǎng)絡(luò)技術(shù)有限公司