專利名稱:一種網(wǎng)站多數(shù)據(jù)源切換方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)站的創(chuàng)建與維護(hù)技術(shù),尤其涉及一種網(wǎng)站多數(shù)據(jù)源切換方法 和裝置。
背景技術(shù):
目前,隨著互聯(lián)網(wǎng)技術(shù)的深入發(fā)展,尤其是企業(yè)信息化的高速發(fā)展,企業(yè) 已經(jīng)認(rèn)識(shí)到依托于互聯(lián)網(wǎng)打造個(gè)性化的企業(yè)信息門(mén)戶網(wǎng)站,以此來(lái)推薦自己、 推銷產(chǎn)品的重要性,進(jìn)而使得企業(yè)依托于互聯(lián)網(wǎng)建立企業(yè)信息化門(mén)戶的需求越 來(lái)越廣泛。
現(xiàn)有的網(wǎng)站建設(shè)方案通常會(huì)為每個(gè)網(wǎng)站提供專屬的數(shù)據(jù)庫(kù),由每個(gè)網(wǎng)站獨(dú) 立維護(hù)其數(shù)據(jù)庫(kù)連接,以提高網(wǎng)站數(shù)據(jù)的安全性和可維護(hù)性。在數(shù)據(jù)庫(kù)連接的 維護(hù)操作中通常會(huì)釆用連接池技術(shù),即為每個(gè)網(wǎng)站預(yù)先創(chuàng)建一批數(shù)據(jù)庫(kù)連接組
成數(shù)據(jù)庫(kù)連接池,并對(duì)數(shù)據(jù)庫(kù)連接池中的數(shù)據(jù)庫(kù)連接進(jìn)行管理;當(dāng)應(yīng)用程序使 用完一個(gè)數(shù)據(jù)庫(kù)連接時(shí),并不是真正關(guān)閉該數(shù)據(jù)庫(kù)連接,而是將該數(shù)據(jù)庫(kù)歸還 到數(shù)據(jù)庫(kù)連接池中,從而使得其他的數(shù)據(jù)庫(kù)訪問(wèn)操作可以繼續(xù)使用該數(shù)據(jù)庫(kù)連 接,而不需再創(chuàng)建新的數(shù)據(jù)庫(kù)連接。使用連接池的好處在于,它可以提高數(shù)據(jù) 庫(kù)訪問(wèn)操作的效率,因?yàn)轭l繁的打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接比較耗時(shí)。
然而,由于用戶訪問(wèn)網(wǎng)站具有一定的隨機(jī)性, 一個(gè)網(wǎng)站有可能一段時(shí)間內(nèi) 訪問(wèn)的用戶比較多,而另一段時(shí)間內(nèi)又幾乎沒(méi)有訪問(wèn)的用戶。如果每個(gè)網(wǎng)站都 建立單獨(dú)的數(shù)據(jù)庫(kù)連接池,則在網(wǎng)站的訪問(wèn)用戶較多時(shí),會(huì)導(dǎo)致該網(wǎng)站的數(shù)據(jù) 庫(kù)連接資源緊張;在網(wǎng)站的訪問(wèn)用戶很少時(shí),會(huì)導(dǎo)致該網(wǎng)站的數(shù)據(jù)庫(kù)連接資源 空閑;也即不能及時(shí)根據(jù)用戶的訪問(wèn)情況調(diào)整資源的分配,這在一定程度上會(huì) 造成資源的浪費(fèi)。另外,由于單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的最大連接數(shù)有限,因此為每個(gè)網(wǎng)站維護(hù)獨(dú)立的數(shù)據(jù)庫(kù)連接池,不利于網(wǎng)站的大規(guī)模部署,例如 一臺(tái)數(shù)據(jù) 庫(kù)服務(wù)器具有部署100家網(wǎng)站的能力,如果應(yīng)用程序?yàn)槊總€(gè)網(wǎng)站分別維護(hù)獨(dú)立 的數(shù)據(jù)庫(kù)連接池,而每個(gè)數(shù)據(jù)庫(kù)連接池中又包括多個(gè)數(shù)據(jù)庫(kù)連接,那么這臺(tái)數(shù) 據(jù)庫(kù)服務(wù)器的連接總數(shù)將會(huì)直線上升,超出最大連接數(shù)的限制,這是數(shù)據(jù)庫(kù)服 務(wù)器無(wú)法承受的。
此外,傳統(tǒng)的解決訪問(wèn)多數(shù)據(jù)源的方式會(huì)在數(shù)據(jù)訪問(wèn)對(duì)象的層面進(jìn)行改進(jìn), 這種改進(jìn)方式一般會(huì)將數(shù)據(jù)源選擇的邏輯封裝在數(shù)據(jù)訪問(wèn)對(duì)象的基類中,并要 求系統(tǒng)中的其它數(shù)據(jù)訪問(wèn)對(duì)象繼承該基類,而繼承是一種比較強(qiáng)的依賴關(guān)系, 并且對(duì)開(kāi)發(fā)人員來(lái)說(shuō),也增加了編寫(xiě)代碼時(shí)的約東。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種網(wǎng)站多數(shù)據(jù)源切換方法和裝置, 以解決現(xiàn)有的網(wǎng)站數(shù)據(jù)庫(kù)連接管理造成資源浪費(fèi)的問(wèn)題。 為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
本發(fā)明提供了 一種網(wǎng)站多數(shù)據(jù)源切換方法,該方法包括以下步驟
A、 對(duì)請(qǐng)求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系進(jìn)行查找,獲取與訪問(wèn)請(qǐng)求 中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí);
B、 對(duì)所述訪問(wèn)請(qǐng)求的上下文進(jìn)行初始化,并將獲取的數(shù)據(jù)源標(biāo)識(shí)寫(xiě)入初 始化的上下文中;
C、 根據(jù)獲取的數(shù)據(jù)源標(biāo)識(shí)將訪問(wèn)切換到相應(yīng)的數(shù)據(jù)庫(kù),并執(zhí)行對(duì)所述數(shù) 據(jù)庫(kù)的訪問(wèn)。
所述步驟C包括
Cl、調(diào)用數(shù)據(jù)源切換組件從所述上下文中獲取所述數(shù)據(jù)源標(biāo)識(shí),并根據(jù)所 述數(shù)據(jù)源標(biāo)識(shí)從切換策略獲取對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的連接池;
C2、從所述數(shù)據(jù)庫(kù)服務(wù)器的連接池中獲取數(shù)據(jù)庫(kù)連接,將訪問(wèn)切換到相應(yīng) 的數(shù)據(jù)庫(kù),并執(zhí)行對(duì)所述數(shù)據(jù)庫(kù)的訪問(wèn)。
所述步驟A之前進(jìn)一步包括:為不同的數(shù)據(jù)庫(kù)分別設(shè)置不同的數(shù)據(jù)源標(biāo)識(shí),并建立所述請(qǐng)求參數(shù)與所述數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系。
通過(guò)攔截器的方式,采用攔截器組件攔截所述訪問(wèn)請(qǐng)求。
該方法進(jìn)一步包括根據(jù)所述切換策略,訪問(wèn)需要在數(shù)據(jù)庫(kù)服務(wù)器間進(jìn)行 切換時(shí),根據(jù)請(qǐng)求參數(shù)與數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)的映射關(guān)系,獲取與訪問(wèn)請(qǐng)求中的 請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí);并根據(jù)所述數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)找到對(duì)應(yīng) 的數(shù)據(jù)庫(kù)服務(wù)器的連接池,進(jìn)而從所述數(shù)據(jù)庫(kù)連接池中獲取相應(yīng)的數(shù)據(jù)庫(kù)連接, 利用獲取的數(shù)據(jù)庫(kù)連接將訪問(wèn)切換到相應(yīng)的數(shù)據(jù)庫(kù)。
所述映射關(guān)系為鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。
本發(fā)明還提供了一種網(wǎng)站多數(shù)據(jù)源切換裝置,包括數(shù)據(jù)源標(biāo)識(shí)獲取模塊、
數(shù)據(jù)源標(biāo)識(shí)傳遞模塊、多數(shù)據(jù)源切換模塊、多數(shù)據(jù)源切換策略模塊和多數(shù)據(jù)源
切換配置模塊;其中,
所述數(shù)據(jù)源標(biāo)識(shí)獲取模塊,用于根據(jù)請(qǐng)求參數(shù)和數(shù)據(jù)源標(biāo)識(shí)的映射關(guān)系獲 取與訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí);還用于對(duì)訪問(wèn)請(qǐng)求的上下文 進(jìn)行初始化,并將獲取的數(shù)據(jù)源標(biāo)識(shí)寫(xiě)入上下文中;
數(shù)據(jù)源標(biāo)識(shí)傳遞模塊,連接所述數(shù)據(jù)源標(biāo)識(shí)獲取模塊,用于將所獲取的數(shù) 據(jù)源標(biāo)識(shí)傳遞給所述多數(shù)據(jù)切換模塊;
多數(shù)據(jù)源切換模塊,連接所述數(shù)據(jù)源標(biāo)識(shí)傳遞模塊,用于執(zhí)行數(shù)據(jù)源的實(shí) 際切換操作;
多數(shù)據(jù)源切換策略模塊,連接所述多數(shù)據(jù)源切換模塊,用于封裝請(qǐng)求參數(shù) 與數(shù)據(jù)源標(biāo)識(shí)的映射關(guān)系,以及數(shù)據(jù)源標(biāo)識(shí)與數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)的映射關(guān)系, 供其他模塊使用;
多數(shù)據(jù)源切換配置模塊,連接所述多數(shù)據(jù)源切換模塊和所述多數(shù)據(jù)源切換 策略模塊,用于配置數(shù)據(jù)源切換模塊和多數(shù)據(jù)源切換策略模塊,供所述切換操 作使用。
所述數(shù)據(jù)源切換策略模塊是一種可插拔的結(jié)構(gòu),切換策略通過(guò)配置文件的 方式在系統(tǒng)中指定。
所述映射關(guān)系為鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。本發(fā)明所提供的一種網(wǎng)站多數(shù)據(jù)源切換方法和裝置,對(duì)網(wǎng)站的數(shù)據(jù)源管理 時(shí),使用集中的方式統(tǒng)一管理數(shù)據(jù)庫(kù)級(jí)別的連接使用,即在應(yīng)用程序端建立一 個(gè)大的數(shù)據(jù)庫(kù)連接池,該連接池可以為同一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上的多家網(wǎng)站提供 服務(wù)。集中式的數(shù)據(jù)庫(kù)連接管理,使得數(shù)據(jù)庫(kù)服務(wù)器上需要的數(shù)據(jù)庫(kù)連接總數(shù) 大大減少;并且可以及時(shí)地動(dòng)態(tài)分配可用的數(shù)據(jù)庫(kù)資源,減少了資源的浪費(fèi)。 由于不需要再為每個(gè)網(wǎng)站分別維護(hù)單獨(dú)的連接池,也提高了系統(tǒng)的可維護(hù)性, 減少了工作人員的工作量。
此外,本發(fā)明的裝置對(duì)開(kāi)發(fā)人員來(lái)說(shuō)是完全透明的,開(kāi)發(fā)人員不需要實(shí)現(xiàn) 特定的接口,或者繼承特定的基類,這樣既減少了編寫(xiě)代碼時(shí)的約束,也增加 了使用多數(shù)據(jù)源的靈活性,開(kāi)發(fā)人員可以根據(jù)實(shí)際應(yīng)用的需要,通過(guò)配置選擇 是否使用多數(shù)據(jù)源,而不需要對(duì)應(yīng)用的代碼進(jìn)行修改。本發(fā)明的裝置引入的多 數(shù)據(jù)源切換策略模塊是一種可插拔的結(jié)構(gòu),切換策略可以通過(guò)配置文件的方式
在系統(tǒng)中指定;用戶可以根據(jù)實(shí)際需要定義新的切換策略,而不會(huì)對(duì)系統(tǒng)造成 影響,從而也增加了多數(shù)據(jù)源切換的靈活性。
圖l為本發(fā)明一種網(wǎng)站多數(shù)據(jù)源切換方法的流程圖; 圖2為本發(fā)明一種網(wǎng)站多數(shù)據(jù)源切換裝置的組成結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)一步詳細(xì)闡述。 本發(fā)明在對(duì)網(wǎng)站的數(shù)據(jù)源進(jìn)行管理時(shí),釆用集中的方式統(tǒng)一管理數(shù)據(jù)庫(kù)級(jí)
別的連接使用,也即在應(yīng)用程序端建立一個(gè)大的數(shù)據(jù)庫(kù)連接池,使這個(gè)連接池
可以為同一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上的多家網(wǎng)站提供服務(wù)。如圖l所示,本發(fā)明所提
供的一種網(wǎng)站多數(shù)據(jù)源切換方法,主要包括以下步驟
步驟101,對(duì)請(qǐng)求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系進(jìn)行查找,獲取與訪
問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí)。用戶需要訪問(wèn)網(wǎng)站時(shí),通過(guò)客戶端向應(yīng)用服務(wù)器發(fā)送訪問(wèn)請(qǐng)求;應(yīng)用服務(wù) 器根據(jù)訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù),從請(qǐng)求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系中獲 取與該請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí)。由此可以看出,本發(fā)明需要預(yù)先為數(shù)據(jù) 庫(kù)服務(wù)器中各個(gè)不同的數(shù)據(jù)庫(kù)分別設(shè)置不同的數(shù)據(jù)源標(biāo)識(shí),并且請(qǐng)求參數(shù)和實(shí) 際的數(shù)據(jù)源標(biāo)識(shí)之間需要維護(hù)一個(gè)映射關(guān)系,即可以從訪問(wèn)請(qǐng)求中獲得需要的 請(qǐng)求參數(shù),并將該請(qǐng)求參數(shù)經(jīng)過(guò)映射得到實(shí)際的數(shù)據(jù)源標(biāo)識(shí)。其中,請(qǐng)求參數(shù) 可以為網(wǎng)站的域名或其它可用參數(shù)。
需要指出的是,本發(fā)明可以通過(guò)攔截器的方式,采用攔截器組件攔截來(lái)自
用戶的訪問(wèn)請(qǐng)求并從中獲取數(shù)據(jù)源標(biāo)識(shí),攔截器的機(jī)制為JAVAEE體系中的現(xiàn)
有技術(shù),此處不再贅述。此外,本發(fā)明中映射關(guān)系的建立可以釆用一種鍵值對(duì) 的數(shù)據(jù)結(jié)構(gòu),其中,鍵為從訪問(wèn)請(qǐng)求中獲得的請(qǐng)求參數(shù),值為數(shù)據(jù)源標(biāo)識(shí)。
另外,由于在應(yīng)用服務(wù)商的平臺(tái)上,有動(dòng)態(tài)增加網(wǎng)站和刪除網(wǎng)站的需要, 因此本發(fā)明中請(qǐng)求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系需要支持動(dòng)態(tài)更新,即請(qǐng) 求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系需要隨著網(wǎng)站的增加和刪除而動(dòng)態(tài)更新。 對(duì)應(yīng)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),本發(fā)明需要在鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)上建立映射關(guān)系的管 理機(jī)制,并且實(shí)現(xiàn)映射關(guān)系的動(dòng)態(tài)更新、優(yōu)化訪問(wèn)等功能。映射關(guān)系在應(yīng)用服 務(wù)器啟動(dòng)時(shí)進(jìn)行初始化操作。
步驟102,對(duì)訪問(wèn)請(qǐng)求的上下文進(jìn)行初始化,并將獲取的數(shù)據(jù)源標(biāo)識(shí)寫(xiě)入 初始化的上下文中。
應(yīng)用服務(wù)器在獲取數(shù)據(jù)源標(biāo)識(shí)后,需要將數(shù)據(jù)源標(biāo)識(shí)傳遞給數(shù)據(jù)庫(kù)驅(qū)動(dòng)程 序的連接對(duì)象。通常,參數(shù)的傳遞需要影響方法的簽名,主要是影響方法的參 數(shù)列表,這里的參數(shù)當(dāng)然包括數(shù)據(jù)源標(biāo)識(shí)。程序開(kāi)發(fā)一般會(huì)使用分層的結(jié)構(gòu), 如表示層、業(yè)務(wù)層和持久層等。如果直接在方法的簽名中增加參數(shù),則上述分
層結(jié)構(gòu)中的多個(gè)層次的代碼都需要進(jìn)行修改;而且同一層代碼中的多個(gè)方法如 果都需要數(shù)據(jù)訪問(wèn)操作的話,那么多個(gè)方法都需要添加相關(guān)的參數(shù),這種方式 會(huì)嚴(yán)重影響系統(tǒng)的可維護(hù)性。
因此,在本發(fā)明中采用一種上下文機(jī)制,所謂上下文是指運(yùn)行時(shí)的環(huán)境,上下文的作用范圍是線程級(jí)別的,系統(tǒng)中每個(gè)訪問(wèn)請(qǐng)求都被應(yīng)用服務(wù)器上的一 個(gè)線程所處理,所以每個(gè)訪問(wèn)請(qǐng)求都有屬于自己的上下文,上下文在攔截器組 件中進(jìn)行初始化,并在上下文中設(shè)置所獲取的數(shù)據(jù)源標(biāo)識(shí)。在處理一個(gè)訪問(wèn)請(qǐng) 求的方法調(diào)用堆棧中都可以得到當(dāng)前線程的上下文,不需要在多個(gè)方法簽名中 顯示地傳遞數(shù)據(jù)源標(biāo)識(shí)等系統(tǒng)參數(shù)。由此可以看出,釆用上下文機(jī)制使系統(tǒng)的 可維護(hù)性得到提高。進(jìn)一步的,如果有其它系統(tǒng)環(huán)境參數(shù),也可以在上下文中 擴(kuò)展。
步驟103,調(diào)用數(shù)據(jù)源切換組件從上下文中獲取數(shù)據(jù)源標(biāo)識(shí),并根據(jù)數(shù)據(jù) 源標(biāo)識(shí)從切換策略獲取對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的連接池。
本發(fā)明中,可以根據(jù)實(shí)際需要設(shè)置不同的切換策略,并且,切換策略可以 被動(dòng)態(tài)的維護(hù)。本發(fā)明既可以支持訪問(wèn)在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的多個(gè)數(shù)據(jù)庫(kù)之 間進(jìn)行切換,也可以支持訪問(wèn)在不同數(shù)據(jù)庫(kù)服務(wù)器的多個(gè)數(shù)據(jù)庫(kù)之間進(jìn)行切換, 后者為本發(fā)明可選的較佳實(shí)施例,可以根據(jù)應(yīng)用場(chǎng)景進(jìn)行配置;即釆用該方法 的系統(tǒng)可以有多個(gè)數(shù)據(jù)庫(kù)服務(wù)器,每個(gè)數(shù)據(jù)庫(kù)服務(wù)器又可以有多個(gè)數(shù)據(jù)庫(kù)。系 統(tǒng)運(yùn)行時(shí)可以根據(jù)配置的切換策略決定是否在多個(gè)數(shù)據(jù)庫(kù)服務(wù)器間進(jìn)行切換, 且系統(tǒng)為每個(gè)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行獨(dú)立的連接池管理。根據(jù)切換策略,在需要進(jìn) 行數(shù)據(jù)庫(kù)服務(wù)器間的切換時(shí),根據(jù)上下文中的數(shù)據(jù)源標(biāo)識(shí)得到當(dāng)前網(wǎng)站對(duì)應(yīng)的 數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí),通過(guò)該數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)可以從系統(tǒng)的容器中得到對(duì)應(yīng)數(shù) 據(jù)庫(kù)服務(wù)器的連接池,從而達(dá)到數(shù)據(jù)庫(kù)服務(wù)器級(jí)別的切換。
相應(yīng)的,本發(fā)明中需要維護(hù)數(shù)據(jù)源標(biāo)識(shí)和數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)的映射關(guān)系, 映射關(guān)系的建立使用一種鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),其中鍵為數(shù)據(jù)源標(biāo)識(shí),值為數(shù)據(jù) 庫(kù)服務(wù)器標(biāo)識(shí)。在此數(shù)據(jù)結(jié)構(gòu)上建立映射關(guān)系的管理機(jī)制,并且實(shí)現(xiàn)映射關(guān)系 的動(dòng)態(tài)更新和優(yōu)化訪問(wèn)等功能。進(jìn)行數(shù)據(jù)庫(kù)服務(wù)器間的切換時(shí),根據(jù)數(shù)據(jù)源標(biāo) 識(shí)與數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)的映射關(guān)系,獲取與數(shù)據(jù)源標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器
標(biāo)識(shí);并根據(jù)數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)找到對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的連接池,進(jìn)而從數(shù)
據(jù)庫(kù)服務(wù)器的連接池中獲取相應(yīng)數(shù)據(jù)庫(kù)連接,利用獲取的數(shù)據(jù)庫(kù)連接將訪問(wèn)切 換到相應(yīng)的數(shù)據(jù)庫(kù)。步驟104,從數(shù)據(jù)庫(kù)服務(wù)器的連接池中獲取數(shù)據(jù)庫(kù)連接,將訪問(wèn)切換到相 應(yīng)的數(shù)據(jù)庫(kù),并執(zhí)行對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。
在從上下文中獲取數(shù)據(jù)源標(biāo)識(shí),并得到訪問(wèn)請(qǐng)求所對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的 連接池后,應(yīng)用程序?qū)⒃L問(wèn)切換到相應(yīng)的數(shù)據(jù)源,并執(zhí)行對(duì)數(shù)據(jù)源的訪問(wèn)。數(shù) 據(jù)源切換組件在和持久層的交互中,承擔(dān)連接提供者的角色,它需要為持久層
提供到目標(biāo)數(shù)據(jù)源的連接。數(shù)據(jù)源切換組件實(shí)現(xiàn)了 JAVAEE技術(shù)體系中標(biāo)準(zhǔn)的 數(shù)據(jù)源接口,它可以在所有符合標(biāo)準(zhǔn)的JAVA應(yīng)用服務(wù)器中使用。本發(fā)明中, 數(shù)據(jù)源切換組件和數(shù)據(jù)訪問(wèn)框架沒(méi)有強(qiáng)依賴關(guān)系。數(shù)據(jù)源切換組件是數(shù)據(jù)訪問(wèn) 對(duì)象的協(xié)作者,它不依賴于具體的數(shù)據(jù)訪問(wèn)框架。數(shù)據(jù)訪問(wèn)框架只依賴于連接 提供者的接口定義,可以根據(jù)實(shí)際需要決定是否使用多數(shù)據(jù)源切換組件。數(shù)據(jù) 訪問(wèn)框架通過(guò)可擴(kuò)展標(biāo)識(shí)語(yǔ)言(XML, Extensible Markup Language)配置文件 維護(hù)與數(shù)據(jù)源切換組件的協(xié)作關(guān)系。當(dāng)數(shù)據(jù)源切換組件從底層數(shù)據(jù)庫(kù)服務(wù)器的 連接池中得到數(shù)據(jù)庫(kù)連接時(shí),重置該數(shù)據(jù)庫(kù)連接對(duì)應(yīng)的數(shù)據(jù)源,實(shí)際上是將要 使用的數(shù)據(jù)源標(biāo)識(shí)通過(guò)數(shù)據(jù)庫(kù)連接告知數(shù)據(jù)庫(kù)服務(wù)器,相當(dāng)于在數(shù)據(jù)庫(kù)級(jí)別執(zhí) 行了 一條切換數(shù)據(jù)庫(kù)的結(jié)構(gòu)化查詢語(yǔ)句(SQL, Structured Query Language )。完 成數(shù)據(jù)源切換后,數(shù)據(jù)源切換組件將數(shù)據(jù)庫(kù)連接交給應(yīng)用程序的持久層。
以上步驟完成了多數(shù)據(jù)源的切換,實(shí)際業(yè)務(wù)的數(shù)據(jù)訪問(wèn)邏輯完全不需要修 改,也即數(shù)據(jù)源的切換對(duì)應(yīng)用程序是完全透明的。應(yīng)用開(kāi)發(fā)人員可以按照普通 應(yīng)用的方式進(jìn)行開(kāi)發(fā),在需要多數(shù)據(jù)源的場(chǎng)景下,配置啟用數(shù)據(jù)源切換組件。 持久層完成數(shù)據(jù)訪問(wèn)后,將連接歸還給集中式的連接池,該連接可以繼續(xù)用于 其它數(shù)據(jù)源的訪問(wèn),從而達(dá)到較高的效率。
為實(shí)現(xiàn)上述的網(wǎng)站多數(shù)據(jù)源切換方法,本發(fā)明還提供了一種網(wǎng)站多數(shù)據(jù)源 切換裝置,如圖2所示,該裝置包括數(shù)據(jù)源標(biāo)識(shí)獲取模塊IO、數(shù)據(jù)源標(biāo)識(shí)傳 遞模塊20、多數(shù)據(jù)源切換模塊30、多數(shù)據(jù)源切換策略模塊40、多數(shù)據(jù)源切換 配置模塊50。
其中,數(shù)據(jù)源標(biāo)識(shí)獲取模塊IO,用于攔截用戶的訪問(wèn)請(qǐng)求,根據(jù)請(qǐng)求參數(shù) 和數(shù)據(jù)源標(biāo)識(shí)的映射關(guān)系獲取與訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí);完成線程級(jí)別上下文的初始化,并將數(shù)據(jù)源標(biāo)識(shí)等系統(tǒng)參數(shù)置入上下文中,以 供其它模塊使用。
數(shù)據(jù)源標(biāo)識(shí)傳遞模塊20,連接數(shù)據(jù)源標(biāo)識(shí)獲取模塊10,用于負(fù)責(zé)上下文信 息的傳遞工作,傳遞給多數(shù)據(jù)源切換模塊30。由于釆用上下文機(jī)制,數(shù)據(jù)源標(biāo)
識(shí)傳遞模塊20在增加系統(tǒng)參數(shù)時(shí)不需要顯示地修改應(yīng)用程序的方法簽名,可提
高系統(tǒng)的可維護(hù)性。
多數(shù)據(jù)源切換模塊30,連接數(shù)據(jù)源標(biāo)識(shí)傳遞模塊20,用于執(zhí)行數(shù)據(jù)源的實(shí) 際切換操作,支持?jǐn)?shù)據(jù)庫(kù)服務(wù)器級(jí)別和數(shù)據(jù)庫(kù)級(jí)別的切換??赏ㄟ^(guò)配置系統(tǒng)進(jìn) 行維護(hù)。
多數(shù)據(jù)源切換策略模塊40,連接多數(shù)據(jù)源切換模塊30,用于封裝數(shù)據(jù)源標(biāo) 識(shí)與請(qǐng)求參數(shù)的映射關(guān)系,以及數(shù)據(jù)源標(biāo)識(shí)與數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)的映射關(guān)系, 可以根據(jù)實(shí)際情況的需要定制并擴(kuò)展不同的映射規(guī)則。
多數(shù)據(jù)源切換配置模塊50,連接多數(shù)據(jù)源切換模塊30和多數(shù)據(jù)源切換策 略模塊40,用于配置數(shù)據(jù)源切換模塊30和多數(shù)據(jù)源切換策略模塊40,供切換 搡作使用,以滿足不同應(yīng)用場(chǎng)景的需要。
綜上所述,本發(fā)明所提供的一種網(wǎng)站多數(shù)據(jù)源切換方法和裝置,對(duì)網(wǎng)站的 數(shù)據(jù)源管理時(shí),使用集中的方式統(tǒng)一管理數(shù)據(jù)庫(kù)級(jí)別的連接。集中式的數(shù)據(jù)庫(kù) 連接管理,使得數(shù)據(jù)庫(kù)服務(wù)器上需要的數(shù)據(jù)庫(kù)連接總數(shù)大大減少;并且可以及 時(shí)地動(dòng)態(tài)分配可用的數(shù)據(jù)庫(kù)資源,減少了資源的浪費(fèi)。另外,由于不需要再為 每個(gè)網(wǎng)站分別維護(hù)單獨(dú)的連接池,也提高了系統(tǒng)的可維護(hù)性,減少了工作人員 的工作量。
此外,本發(fā)明的裝置對(duì)開(kāi)發(fā)人員來(lái)說(shuō)是完全透明的,開(kāi)發(fā)人員不需要實(shí)現(xiàn) 特定的接口,或者繼承特定的基類,這樣既減少了編寫(xiě)代碼時(shí)的約東,也增加 了使用多數(shù)據(jù)源的靈活性,開(kāi)發(fā)人員可以根據(jù)實(shí)際應(yīng)用的需要,通過(guò)配置選擇 是否使用多數(shù)據(jù)源,而不需要對(duì)應(yīng)用的代碼進(jìn)行修改。本發(fā)明的裝置引入的多 數(shù)據(jù)源切換策略模塊是一種可插拔的結(jié)構(gòu),切換策略可以通過(guò)配置文件的方式 在系統(tǒng)中指定;用戶可以根據(jù)實(shí)際需要定義新的切換策略,通過(guò)配置文件增加配置信息即可使用,而不會(huì)對(duì)系統(tǒng)造成影響,從而也增加了多數(shù)據(jù)源切換的靈 活性。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種網(wǎng)站多數(shù)據(jù)源切換方法,其特征在于,該方法包括以下步驟A、對(duì)請(qǐng)求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系進(jìn)行查找,獲取與訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí);B、對(duì)所述訪問(wèn)請(qǐng)求的上下文進(jìn)行初始化,并將獲取的數(shù)據(jù)源標(biāo)識(shí)寫(xiě)入初始化的上下文中;C、根據(jù)獲取的數(shù)據(jù)源標(biāo)識(shí)將訪問(wèn)切換到相應(yīng)的數(shù)據(jù)庫(kù),并執(zhí)行對(duì)所述數(shù)據(jù)庫(kù)的訪問(wèn)。
2、 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述步驟C包括Cl、調(diào)用數(shù)據(jù)源切換組件從所述上下文中獲取所述數(shù)據(jù)源標(biāo)識(shí),并根據(jù)所 述數(shù)據(jù)源標(biāo)識(shí)從切換策略獲取對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的連接池;C2、從所述數(shù)據(jù)庫(kù)服務(wù)器的連接池中獲取數(shù)據(jù)庫(kù)連接,將訪問(wèn)切換到相應(yīng) 的數(shù)據(jù)庫(kù),并執(zhí)行對(duì)所述數(shù)據(jù)庫(kù)的訪問(wèn)。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A之前進(jìn)一步包 括為不同的數(shù)據(jù)庫(kù)分別設(shè)置不同的數(shù)據(jù)源標(biāo)識(shí),并建立所述請(qǐng)求參數(shù)與所述 數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系。
4、 根據(jù)權(quán)利要求l所述的方法,其特征在于,通過(guò)攔截器的方式,釆用攔 截器組件攔截所述訪問(wèn)請(qǐng)求。
5、 根據(jù)權(quán)利要求l所述的方法,其特征在于,該方法進(jìn)一步包括根據(jù)所 述切換策略,訪問(wèn)需要在數(shù)據(jù)庫(kù)服務(wù)器間進(jìn)行切換時(shí),根據(jù)請(qǐng)求參數(shù)與數(shù)據(jù)庫(kù) 服務(wù)器標(biāo)識(shí)的映射關(guān)系,獲取與訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器 標(biāo)識(shí);并根據(jù)所述數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)找到對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的連接池,進(jìn)而 從所述數(shù)據(jù)庫(kù)連接池中獲取相應(yīng)的數(shù)據(jù)庫(kù)連接,利用獲取的數(shù)據(jù)庫(kù)連接將訪問(wèn) 切換到相應(yīng)的數(shù)據(jù)庫(kù)。
6、 根據(jù)權(quán)利要求1至3中任一所述的方法,其特征在于,所述映射關(guān)系為 鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。
7、 一種網(wǎng)站多數(shù)據(jù)源切換裝置,其特征在于,包括數(shù)據(jù)源標(biāo)識(shí)獲取模塊、 數(shù)據(jù)源標(biāo)識(shí)傳遞模塊、多數(shù)據(jù)源切換模塊、多數(shù)據(jù)源切換策略模塊和多數(shù)據(jù)源 切換配置模塊;其中,所述數(shù)據(jù)源標(biāo)識(shí)獲取模塊,用于根據(jù)請(qǐng)求參數(shù)和數(shù)據(jù)源標(biāo)識(shí)的映射關(guān)系獲取與訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí);還用于對(duì)訪問(wèn)請(qǐng)求的上下文 進(jìn)行初始化,并將獲取的數(shù)據(jù)源標(biāo)識(shí)寫(xiě)入上下文中;數(shù)據(jù)源標(biāo)識(shí)傳遞模塊,連接所述數(shù)據(jù)源標(biāo)識(shí)獲取模塊,用于將所獲取的數(shù) 據(jù)源標(biāo)識(shí)傳遞給所述多數(shù)據(jù)切換模塊;多數(shù)據(jù)源切換模塊,連接所述數(shù)據(jù)源標(biāo)識(shí)傳遞模塊,用于執(zhí)行數(shù)據(jù)源的實(shí) 際切換操作;多數(shù)據(jù)源切換策略模塊,連接所述多數(shù)據(jù)源切換模塊,用于封裝請(qǐng)求參數(shù) 與數(shù)據(jù)源標(biāo)識(shí)的映射關(guān)系,以及數(shù)據(jù)源標(biāo)識(shí)與數(shù)據(jù)庫(kù)服務(wù)器標(biāo)識(shí)的映射關(guān)系, 供其他模塊使用;多數(shù)據(jù)源切換配置模塊,連接所述多數(shù)據(jù)源切換模塊和所述多數(shù)據(jù)源切換 策略模塊,用于配置數(shù)據(jù)源切換模塊和多數(shù)據(jù)源切換策略模塊,供所述切換操 作使用。
8、 根據(jù)權(quán)利要求7所述的網(wǎng)站多數(shù)據(jù)源切換裝置,其特征在于,所述數(shù)據(jù) 源切換策略模塊是一種可插拔的結(jié)構(gòu),切換策略通過(guò)配置文件的方式在系統(tǒng)中 指定。
9、 根據(jù)權(quán)利要求7所述的網(wǎng)站多數(shù)據(jù)源切換裝置,其特征在于,所述映射 關(guān)系為鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。
全文摘要
本發(fā)明公開(kāi)了一種網(wǎng)站多數(shù)據(jù)源切換方法,包括對(duì)請(qǐng)求參數(shù)與數(shù)據(jù)源標(biāo)識(shí)之間的映射關(guān)系進(jìn)行查找,獲取與訪問(wèn)請(qǐng)求中的請(qǐng)求參數(shù)相對(duì)應(yīng)的數(shù)據(jù)源標(biāo)識(shí);對(duì)訪問(wèn)請(qǐng)求的上下文進(jìn)行初始化,并將獲取的數(shù)據(jù)源標(biāo)識(shí)寫(xiě)入上下文中;調(diào)用數(shù)據(jù)源切換組件從上下文中獲取數(shù)據(jù)源標(biāo)識(shí),并根據(jù)數(shù)據(jù)源標(biāo)識(shí)從切換策略中獲取對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器的連接池;從數(shù)據(jù)庫(kù)服務(wù)器的連接池中獲取數(shù)據(jù)庫(kù)連接,將訪問(wèn)切換到相應(yīng)的數(shù)據(jù)庫(kù),并執(zhí)行對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。本發(fā)明還公開(kāi)了一種網(wǎng)站多數(shù)據(jù)源切換裝置,通過(guò)使用集中式的數(shù)據(jù)源連接管理來(lái)分配數(shù)據(jù)源資源,使得數(shù)據(jù)庫(kù)服務(wù)器上需要的數(shù)據(jù)庫(kù)連接總數(shù)大大減少;并且可以及時(shí)地動(dòng)態(tài)分配可用的數(shù)據(jù)庫(kù)資源,減少了資源的浪費(fèi)。
文檔編號(hào)G06F17/30GK101408899SQ20081022697
公開(kāi)日2009年4月15日 申請(qǐng)日期2008年11月21日 優(yōu)先權(quán)日2008年11月21日
發(fā)明者雨 張, 趙寶剛 申請(qǐng)人:北京中企開(kāi)源信息技術(shù)有限公司