一種基于多數(shù)據(jù)庫的動態(tài)切換方法和裝置制造方法
【專利摘要】本發(fā)明提出一種基于多數(shù)據(jù)庫的動態(tài)切換方法和裝置,其中方法包括:在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件;所述配置文件包括一個以上鍵值對,其中,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名;將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中;當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法;利用獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。本發(fā)明能夠?qū)崿F(xiàn)基于配置的讀寫分離,并且達(dá)到方法級別的數(shù)據(jù)庫切換。
【專利說明】一種基于多數(shù)據(jù)庫的動態(tài)切換方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫【技術(shù)領(lǐng)域】,尤其涉及一種基于多數(shù)據(jù)庫的動態(tài)切換方法和裝置。
【背景技術(shù)】
[0002]當(dāng)數(shù)據(jù)庫包括主數(shù)據(jù)庫和一個以上從數(shù)據(jù)庫時,從數(shù)據(jù)庫按照固定的周期同步主數(shù)據(jù)庫中保存的數(shù)據(jù)。計算機(jī)應(yīng)用系統(tǒng)可以向主數(shù)據(jù)庫進(jìn)行寫操作(包括增加、插入、刪除等改變數(shù)據(jù)內(nèi)容的操作),并從從數(shù)據(jù)庫進(jìn)行讀操作。計算機(jī)應(yīng)用系統(tǒng)針對主數(shù)據(jù)庫或從數(shù)據(jù)庫做的一個讀操作或?qū)懖僮鞣Q為一個方法;多個方法組成一個類,在一類方法中,所有的方法都針對同一個數(shù)據(jù)庫做相同的操作(即讀操作或?qū)懖僮?。
[0003]在現(xiàn)有技術(shù)中,為每個讀數(shù)據(jù)庫的類或?qū)憯?shù)據(jù)庫的類添加配上對應(yīng)的數(shù)據(jù)庫標(biāo)識(即:數(shù)據(jù)源)。計算機(jī)應(yīng)用系統(tǒng)啟動后已經(jīng)初始化好所有需要讀寫操作數(shù)據(jù)庫的類,無法通過計算機(jī)應(yīng)用系統(tǒng)運行時改變他們操作的數(shù)據(jù)庫。如圖1所示,在計算機(jī)應(yīng)用系統(tǒng)啟動后,負(fù)責(zé)寫數(shù)據(jù)操作的一類方法針對對應(yīng)的主數(shù)據(jù)庫進(jìn)行操作,而負(fù)責(zé)讀數(shù)據(jù)操作的一類方法針對對應(yīng)的從數(shù)據(jù)庫進(jìn)行操作。
[0004]為了實現(xiàn)計算機(jī)應(yīng)用系統(tǒng)在多個數(shù)據(jù)庫之間的切換,需要將讀操作的方法與寫操作的方法完全分離到不同程序代碼中,這樣不僅破壞了計算機(jī)應(yīng)用系統(tǒng)的結(jié)構(gòu),也給計算機(jī)應(yīng)用系統(tǒng)的開發(fā)增加成本;并且,現(xiàn)有技術(shù)只能實現(xiàn)對象級別(即針對類)的數(shù)據(jù)庫切換,無法實現(xiàn)方法級別的數(shù)據(jù)庫切換;同時,由于預(yù)先為每一類方法設(shè)置對應(yīng)的數(shù)據(jù)庫標(biāo)識,計算機(jī)應(yīng)用系統(tǒng)啟動后已經(jīng)初始化好所有需要讀寫操作數(shù)據(jù)庫的類,因此無法在計算機(jī)應(yīng)用系統(tǒng)運行時實現(xiàn)數(shù)據(jù)庫的動態(tài)切換。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供了一種基于多數(shù)據(jù)庫的動態(tài)切換方法,能夠?qū)崿F(xiàn)基于配置的讀寫分離,并且達(dá)到方法級別的數(shù)據(jù)庫切換。
[0006]本發(fā)明還提供了一種基于多數(shù)據(jù)庫的動態(tài)切換裝置,能夠?qū)崿F(xiàn)基于配置的讀寫分離,并且達(dá)到方法級別的數(shù)據(jù)庫切換。
[0007]本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
[0008]一種基于多數(shù)據(jù)庫的動態(tài)切換方法,包括:
[0009]在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件;所述配置文件包括一個以上鍵值對,其中,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名;將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中;
[0010]當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法;
[0011]利用獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
[0012]上述方法中,所述的配置文件在計算機(jī)應(yīng)用系統(tǒng)的運行過程中隨著方法的變化而動態(tài)變化;
[0013]從線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識的方式可以為:查找線程池中是否存在該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,如果存在,則獲取所述數(shù)據(jù)庫標(biāo)識;如果不存在,則重新讀取配置文件,將配置文件中該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置在線程池中,從線程池中獲取所述數(shù)據(jù)庫標(biāo)識。
[0014]攔截方法的方式可以為:采用面向切面編程(AOP)技術(shù)攔截該方法。
[0015]一種基于多數(shù)據(jù)庫的動態(tài)切換裝置,包括:
[0016]初始化模塊,用于在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件,并將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中;其中,所述配置文件包括一個以上鍵值對,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名;
[0017]方法攔截模塊,用于當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法;
[0018]方法執(zhí)行模塊,用于利用所述方法攔截模塊獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
[0019]上述裝置中,配置文件在計算機(jī)應(yīng)用系統(tǒng)的運行過程中隨著方法的變化而動態(tài)變化;
[0020]方法攔截模塊從線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識的方式可以為:查找線程池中是否存在該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,如果存在,則獲取所述數(shù)據(jù)庫標(biāo)識;如果不存在,則通知所述初始化模塊重新讀取配置文件,將配置文件中該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置在線程池中,并在所述初始化模塊設(shè)置完畢之后從線程池中獲取所述數(shù)據(jù)庫標(biāo)識。
[0021]方法攔截模塊攔截方法的方式可以為:Α0Ρ技術(shù)攔截該方法。
[0022]可見,本發(fā)明提出的基于多數(shù)據(jù)庫的動態(tài)切換方法及裝置,通過將配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中,實現(xiàn)了基于配置的讀寫分離;并且,由于配置文件中的鍵值對是數(shù)據(jù)庫標(biāo)識與方法名的對應(yīng)關(guān)系,因此能夠達(dá)到方法級別的數(shù)據(jù)庫切換。
【專利附圖】
【附圖說明】
[0023]圖1為現(xiàn)有技術(shù)中計算機(jī)應(yīng)用系統(tǒng)啟動后調(diào)用方法的方式示意圖;
[0024]圖2為本發(fā)明提出的基于多數(shù)據(jù)庫的動態(tài)切換方法實現(xiàn)流程圖;
[0025]圖3為本發(fā)明實施例一的實現(xiàn)流程圖;
[0026]圖4為本發(fā)明提出的基于多數(shù)據(jù)庫的動態(tài)切換裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0027]本發(fā)明提出一種基于多數(shù)據(jù)庫的動態(tài)切換方法,如圖2為該方法的實現(xiàn)流程圖,包括:
[0028]步驟201:在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件;所述配置文件包括一個以上鍵值對,其中,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名;將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中;
[0029]步驟202:當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法;[0030]步驟203:利用獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
[0031]上述方法中,當(dāng)計算機(jī)應(yīng)用系統(tǒng)啟動之后,如果出現(xiàn)新的方法,則配置文件可以在計算機(jī)應(yīng)用系統(tǒng)的運行過程中隨著方法的變化而動態(tài)變化;
[0032]上述步驟202中,從線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識的方式可以為:查找線程池中是否存在該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,如果存在,則獲取所述數(shù)據(jù)庫標(biāo)識;如果不存在,則重新讀取配置文件,將配置文件中該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置在線程池中,從線程池中獲取所述數(shù)據(jù)庫標(biāo)識。
[0033]攔截該方法的方式可以為:采用面向切面編程(AOP,Aspect OrientedProgramming)技術(shù)攔截該方法。
[0034]以下舉具體的實施例詳細(xì)介紹。
[0035]實施例一:
[0036]在本實施例中,預(yù)先在計算機(jī)應(yīng)用系統(tǒng)中設(shè)置基于多數(shù)據(jù)庫的動態(tài)切換裝置。如圖3為本發(fā)明實施例一的實現(xiàn)流程圖,包括:
[0037]步驟301:在計算機(jī)應(yīng)用系統(tǒng)啟動時,基于多數(shù)據(jù)庫的動態(tài)切換裝置讀取相關(guān)的配置文件,配置文件以鍵值對的形式出現(xiàn),其中,鍵配置成數(shù)據(jù)庫的標(biāo)識,值配置成需要訪問成這個數(shù)據(jù)庫的方法名。
[0038]配置文件存放在計算機(jī)應(yīng)用系統(tǒng)中,是現(xiàn)有技術(shù)中已有的文件,配置文件就是在用戶登錄電腦或使用軟件時,軟件系統(tǒng)為用戶所要加載所需環(huán)境的設(shè)置和文件的集合。它包括所有用戶專用的配置設(shè)置。
[0039]步驟302:當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法通過接口或服務(wù)被調(diào)用時,基于多數(shù)據(jù)庫的動態(tài)切換裝置采用AOP技術(shù)對該方法進(jìn)行攔截,并從計算機(jī)應(yīng)用系統(tǒng)的本地線程池中查找該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識。
[0040]其中,線程池中存放了計算機(jī)應(yīng)用系統(tǒng)被調(diào)用的方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識;當(dāng)方法被執(zhí)行時,就從這個線程池中獲取該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識。這樣做是為了能夠?qū)崿F(xiàn)動態(tài)切換數(shù)據(jù)庫。
[0041]步驟303:判斷線程池中是否存在該數(shù)據(jù)庫標(biāo)識;如果存在,則執(zhí)行步驟304 ;如果不存在,則執(zhí)行步驟305;
[0042]步驟304:獲取該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識;返回該方法,利用該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。結(jié)束當(dāng)前流程。
[0043]步驟305:基于多數(shù)據(jù)庫的動態(tài)切換裝置重新讀取配置文件,根據(jù)配置文件的內(nèi)容進(jìn)行初始化,將該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置到本地線程池中,獲取該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識;返回該方法,利用該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
[0044]本發(fā)明還提出一種基于多數(shù)據(jù)庫的動態(tài)切換裝置,如圖4為該裝置結(jié)構(gòu)示意圖,包括:
[0045]初始化模塊401,用于在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件,并將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中;其中,所述配置文件包括一個以上鍵值對,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名;
[0046]方法攔截模塊402,用于當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法;[0047]方法執(zhí)行模塊403,用于利用所述方法攔截模塊402獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
[0048]上述裝置中,配置文件在計算機(jī)應(yīng)用系統(tǒng)的運行過程中隨著方法的變化而動態(tài)變化;
[0049]方法攔截模塊402從線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識的方式可以為:查找線程池中是否存在該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,如果存在,則獲取所述數(shù)據(jù)庫標(biāo)識;如果不存在,則通知所述初始化模塊401重新讀取配置文件,將配置文件中該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置在線程池中,并在所述初始化模塊401設(shè)置完畢之后從線程池中獲取所述數(shù)據(jù)庫標(biāo)識。
[0050]上述裝置中,方法攔截模塊402攔截該方法的方式可以為:采用AOP技術(shù)攔截該方法。
[0051]綜上可見,本發(fā)明提出的基于多數(shù)據(jù)庫的動態(tài)切換方法及裝置,通過將配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中,實現(xiàn)了基于配置的讀寫分離;并且,由于配置文件中的鍵值對是數(shù)據(jù)庫標(biāo)識與方法名的對應(yīng)關(guān)系,因此能夠達(dá)到方法級別的數(shù)據(jù)庫切換。當(dāng)計算機(jī)應(yīng)用系統(tǒng)運行過程中出現(xiàn)新的方法時,不需要進(jìn)行代碼修改,只需要采用配置文件進(jìn)行配置,這種方式可以支持到方法級別上的數(shù)據(jù)源切換,對于同一個數(shù)據(jù)操作層無需進(jìn)行類中的方法分離。對于線上已經(jīng)上線的應(yīng)用,方便進(jìn)行多數(shù)據(jù)源切換。
[0052]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種基于多數(shù)據(jù)庫的動態(tài)切換方法,其特征在于,所述方法包括: 在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件;所述配置文件包括一個以上鍵值對,其中,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名;將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中; 當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法; 利用獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述配置文件在計算機(jī)應(yīng)用系統(tǒng)的運行過程中隨著方法的變化而動態(tài)變化; 所述從線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識的方式為:查找線程池中是否存在該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,如果存在,則獲取所述數(shù)據(jù)庫標(biāo)識;如果不存在,則重新讀取配置文件,將配置文件中該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置在線程池中,從線程池中獲取所述數(shù)據(jù)庫標(biāo)識。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述攔截該方法的方式為:采用面向切面編程AOP技術(shù)攔截該方法。
4.一種基于多數(shù)據(jù)庫的動態(tài)切換裝置,其特征在于,所述裝置包括: 初始化模塊,用于在計算機(jī)應(yīng)用系統(tǒng)啟動時,讀取相關(guān)的配置文件,并將所述配置文件中的數(shù)據(jù)庫標(biāo)識設(shè)置在計算機(jī)應(yīng)用系統(tǒng)的線程池中;其中,所述配置文件包括一個以上鍵值對,鍵為數(shù)據(jù)庫標(biāo)識,值為訪問所述數(shù)據(jù)庫的方法名; 方法攔截模塊,用于當(dāng)計算機(jī)應(yīng)用系統(tǒng)的方法被調(diào)用時,攔截該方法,從所述線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,返回所述被攔截的方法; 方法執(zhí)行模塊,用于利用所述方法攔截模塊獲取的數(shù)據(jù)庫標(biāo)識執(zhí)行該方法。
5.根據(jù)權(quán)利要求4所述的裝置,其特征在于,所述配置文件在計算機(jī)應(yīng)用系統(tǒng)的運行過程中隨著方法的變化而動態(tài)變化; 所述方法攔截模塊從線程池中獲取該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識的方式為:查找線程池中是否存在該方法所對應(yīng)的數(shù)據(jù)庫標(biāo)識,如果存在,則獲取所述數(shù)據(jù)庫標(biāo)識;如果不存在,則通知所述初始化模塊重新讀取配置文件,將配置文件中該方法對應(yīng)的數(shù)據(jù)庫標(biāo)識設(shè)置在線程池中,并在所述初始化模塊設(shè)置完畢之后從線程池中獲取所述數(shù)據(jù)庫標(biāo)識。
6.根據(jù)權(quán)利要求4所述的裝置,其特征在于,所述方法攔截模塊攔截該方法的方式為:采用面向切面編程AOP技術(shù)攔截該方法。
【文檔編號】G06F17/30GK103530427SQ201310537530
【公開日】2014年1月22日 申請日期:2013年11月4日 優(yōu)先權(quán)日:2013年11月4日
【發(fā)明者】崔振 申請人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀(jì)貿(mào)易有限公司