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