一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及切換應(yīng)用程序數(shù)據(jù)源,尤其涉及一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法及系統(tǒng)。
【背景技術(shù)】
[0002]如今的應(yīng)用程序往往需要操作多個(gè)不同的數(shù)據(jù)庫(kù)或者接入其他不同的數(shù)據(jù)庫(kù)中,迫使程序員不得不修改代碼甚至框架來(lái)兼容其業(yè)務(wù)需求。Spring動(dòng)態(tài)切換數(shù)據(jù)源技術(shù)可以實(shí)現(xiàn)應(yīng)用程序數(shù)據(jù)庫(kù)的動(dòng)態(tài)切換,但存在問(wèn)題:沒(méi)有能夠解決多用戶訪問(wèn)單例“sess1nFactory”時(shí)共享“dataSource” (數(shù)據(jù)源)變量,導(dǎo)致產(chǎn)生爭(zhēng)搶“dataSource” (數(shù)據(jù)源),當(dāng)多用戶訪問(wèn)時(shí),可能會(huì)導(dǎo)致系統(tǒng)性能下降。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的,就是提出一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法及系統(tǒng),
[0004]本發(fā)明為解決上述技術(shù)問(wèn)題所采用的技術(shù)方案:
[0005]一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法,其特征在于,包括:
[0006]在應(yīng)用程序中配置多個(gè)數(shù)據(jù)源信息,啟動(dòng)應(yīng)用程序時(shí),加載數(shù)據(jù)源配置項(xiàng);為每個(gè)數(shù)據(jù)源建立一個(gè)連接池的獨(dú)立線程,單個(gè)線程操作單個(gè)數(shù)據(jù)源;
[0007]在應(yīng)用程序需要切換數(shù)據(jù)源的功能模塊中加入切換點(diǎn),所述切換點(diǎn)對(duì)應(yīng)一數(shù)據(jù)源;
[0008]當(dāng)應(yīng)用程序調(diào)用所述功能模塊時(shí),根據(jù)所述切換點(diǎn)對(duì)應(yīng)配置項(xiàng)中的數(shù)據(jù)源信息,向連接池請(qǐng)求數(shù)據(jù)源,切換連接到相應(yīng)的數(shù)據(jù)源。
[0009]通過(guò)為每個(gè)數(shù)據(jù)源建立一個(gè)連接池的獨(dú)立線程,單個(gè)線程操作單個(gè)數(shù)據(jù)源,解決了用戶訪問(wèn)過(guò)多造成的連接爭(zhēng)搶問(wèn)題。
[0010]優(yōu)選的,
[0011]增加一數(shù)據(jù)源時(shí),添加相應(yīng)配置數(shù)據(jù)源信息,為新增數(shù)據(jù)源啟動(dòng)一個(gè)連接池的線程;
[0012]數(shù)據(jù)源可以根據(jù)需要增加或刪除。
[0013]減少一數(shù)據(jù)數(shù)據(jù)源時(shí),關(guān)掉相應(yīng)線程。
[0014]優(yōu)選的,
[0015]所述功能模塊是需要切換數(shù)據(jù)源的方法。
[0016]優(yōu)選的,
[0017]所述功能模塊是配置文件中配置需要切換數(shù)據(jù)源的類。
[0018]在應(yīng)用程序中需要切換數(shù)據(jù)源的方法或配置文件中配置需要切換數(shù)據(jù)源的類中加入切換點(diǎn),所述切換點(diǎn)對(duì)應(yīng)一數(shù)據(jù)源,當(dāng)調(diào)用該方法或該類時(shí),切換到相應(yīng)的數(shù)據(jù)源,操作相應(yīng)的數(shù)據(jù)源。
[0019]本發(fā)明還提供一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的系統(tǒng),包括:
[0020]配置數(shù)據(jù)源模塊,在應(yīng)用程序中配置多個(gè)數(shù)據(jù)源信息,啟動(dòng)應(yīng)用程序時(shí),加載數(shù)據(jù)源配置項(xiàng);
[0021]數(shù)據(jù)庫(kù)連接模塊,為每個(gè)數(shù)據(jù)源建立一個(gè)連接池的獨(dú)立線程,單個(gè)線程操作單個(gè)數(shù)據(jù)源;
[0022]切換點(diǎn)設(shè)置模塊,在應(yīng)用程序需要切換數(shù)據(jù)源的功能模塊中加入切換點(diǎn),所述切換點(diǎn)對(duì)應(yīng)一數(shù)據(jù)源;
[0023]當(dāng)應(yīng)用程序調(diào)用切換點(diǎn)設(shè)置模塊中的所述功能模塊時(shí),根據(jù)功能模塊對(duì)應(yīng)配置數(shù)據(jù)源模塊的數(shù)據(jù)源信息,向數(shù)據(jù)庫(kù)連接模塊的連接池請(qǐng)求數(shù)據(jù)源,切換連接到相應(yīng)的數(shù)據(jù)源。
[0024]優(yōu)選的,
[0025]還包括:
[0026]數(shù)據(jù)源添加刪除模塊,用于增加一數(shù)據(jù)源時(shí),添加相應(yīng)配置數(shù)據(jù)源信息,為新增數(shù)據(jù)源啟動(dòng)一個(gè)連接池的線程;減少一數(shù)據(jù)數(shù)據(jù)源時(shí),用于關(guān)掉相應(yīng)線程。
[0027]優(yōu)選的,
[0028]所述功能模塊是需要切換數(shù)據(jù)源的方法。
[0029]優(yōu)選的,
[0030]所述功能模塊是配置文件中配置需要切換數(shù)據(jù)源的類。
[0031]本發(fā)明通過(guò)為每個(gè)數(shù)據(jù)源建立一個(gè)連接池的獨(dú)立線程,單個(gè)線程操作單個(gè)數(shù)據(jù)源的方式實(shí)現(xiàn)動(dòng)態(tài)切換應(yīng)用程序的數(shù)據(jù)源,解決了用戶訪問(wèn)過(guò)多造成的連接爭(zhēng)搶問(wèn)題。
【附圖說(shuō)明】
[0032]圖1為一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法的連接池與線程池關(guān)系示意圖。
[0033]圖2為一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法的應(yīng)用程序切換到數(shù)據(jù)源的示意圖。
[0034]圖3為一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0035]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0036]實(shí)施例一:
[0037]線程池的原理類似于操作系統(tǒng)中的緩沖區(qū),它的流程如下:先啟動(dòng)若干數(shù)量的線程,并讓這些線程都處于睡眠狀態(tài),當(dāng)客戶端有一個(gè)新請(qǐng)求時(shí),就會(huì)喚醒線程池中的某一個(gè)睡眠線程,讓它來(lái)處理客戶端的這個(gè)請(qǐng)求,當(dāng)處理完這個(gè)請(qǐng)求后,線程又處于睡眠狀態(tài),線程池的應(yīng)用會(huì)節(jié)約大量的的系統(tǒng)資源,使得更多的CPU時(shí)間和內(nèi)存用來(lái)處理實(shí)際的商業(yè)應(yīng)用,而不是頻繁的線程創(chuàng)建與銷毀。
[0038]數(shù)據(jù)庫(kù)連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁(yè)應(yīng)用程序中體現(xiàn)得尤為突出。一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象均對(duì)應(yīng)一個(gè)物理數(shù)據(jù)庫(kù)連接,每次操作都打開(kāi)一個(gè)物理連接,使用完都關(guān)閉連接,這樣造成系統(tǒng)的性能低下。數(shù)據(jù)庫(kù)連接池的解決方案是在應(yīng)用程序啟動(dòng)時(shí)建立足夠的數(shù)據(jù)庫(kù)連接,并將這些連接組成一個(gè)連接池(簡(jiǎn)單說(shuō):在一個(gè)“池”里放了好多半成品的數(shù)據(jù)庫(kù)聯(lián)接對(duì)象),由應(yīng)用程序動(dòng)態(tài)地對(duì)池中的連接進(jìn)行申請(qǐng)、使用和釋放。對(duì)于多于連接池中連接數(shù)的并發(fā)請(qǐng)求,應(yīng)該在請(qǐng)求隊(duì)列中排隊(duì)等待。并且應(yīng)用程序可以根據(jù)池中連接的使用率,動(dòng)態(tài)增加或減少池中的連接數(shù)。
[0039]連接池技術(shù)盡可能多地重用了消耗內(nèi)存地資源,大大節(jié)省了內(nèi)存,提高了服務(wù)器的服務(wù)效率,能夠支持更多的客戶服務(wù)。通過(guò)使用連接池,將大大提高程序運(yùn)行效率,同時(shí),可以通過(guò)其自身的管理機(jī)制來(lái)監(jiān)視數(shù)據(jù)庫(kù)連接的數(shù)量、使用情況等。
[0040]現(xiàn)在應(yīng)用程序操作多個(gè)不同的數(shù)據(jù)源時(shí),為多個(gè)數(shù)據(jù)源建立連接池時(shí)只對(duì)應(yīng)一個(gè)線程,會(huì)出現(xiàn)用戶訪問(wèn)過(guò)多造成的連接爭(zhēng)搶問(wèn)題。
[0041]本發(fā)明提供一種動(dòng)態(tài)切換應(yīng)用程序數(shù)據(jù)源的方法,在應(yīng)用程序中配置多個(gè)數(shù)據(jù)源信息,啟動(dòng)應(yīng)用程序時(shí),加載數(shù)據(jù)源配置項(xiàng)。
[0042]在spring的配置文件配置多個(gè)數(shù)據(jù)源,包括數(shù)據(jù)源所在服務(wù)器IP地址、數(shù)據(jù)源標(biāo)識(shí)、用戶名、密碼等信息,
[0043]如圖1所示,為每個(gè)數(shù)據(jù)源建立一個(gè)連接池的獨(dú)立線程,單個(gè)線程操作單個(gè)數(shù)據(jù)源,這樣,可以防止后續(xù)用戶訪問(wèn)過(guò)多造成的連接爭(zhēng)搶,當(dāng)需要再添加一個(gè)數(shù)據(jù)源時(shí),只需添加相應(yīng)配置,再啟動(dòng)一個(gè)線程即可;反之,如果后續(xù)不需要使用某個(gè)數(shù)據(jù)庫(kù),只需關(guān)掉該線程,整個(gè)過(guò)程都不用重啟應(yīng)用程序。
[0044]如圖2所示,在應(yīng)用程序需要切換數(shù)據(jù)源的功能模塊中加入切換點(diǎn),切換點(diǎn)對(duì)應(yīng)一數(shù)據(jù)源。在需要切換數(shù)據(jù)源的方法中加入切換點(diǎn),切換點(diǎn)對(duì)應(yīng)一數(shù)據(jù)源,或者在配置文件中配置需要切換數(shù)據(jù)源的整個(gè)類,加以監(jiān)聽(tīng)。
[0045]當(dāng)應(yīng)用程序調(diào)用所述功能模塊時(shí),根據(jù)功能模塊對(duì)應(yīng)配置項(xiàng)中的數(shù)據(jù)源信息,向連接池請(qǐng)求數(shù)據(jù)源,切換連接到相應(yīng)的數(shù)據(jù)源。
[0046]當(dāng)應(yīng)用程序在調(diào)用該方法或該類時(shí),自動(dòng)切換到需要操作的數(shù)據(jù)源中,再進(jìn)行數(shù)據(jù)庫(kù)操作,即完成動(dòng)態(tài)切換數(shù)據(jù)庫(kù)的目的。