塊500直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接后,在所述ThreadLocal連接容器的自動關(guān)閉列表記錄所述直接從數(shù)據(jù)庫連接池中獲取的數(shù)據(jù)庫連接;
[0?02]第二連接關(guān)閉模塊900,用于當ThreadLocal連接容器未開啟共享時,所述數(shù)據(jù)訪問模塊根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后,關(guān)閉所述ThreadLocal連接容器的自動關(guān)閉列表中記錄的數(shù)據(jù)庫連接,并清空所述ThreadLocal連接容器的自動關(guān)閉列表。
[0103]本發(fā)明實施例提供的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取裝置,可避免每次均從數(shù)據(jù)庫連接池中創(chuàng)建連接,減少在數(shù)據(jù)庫連接池中獲取數(shù)據(jù)庫連接的次數(shù),提高數(shù)據(jù)庫連接的使用效率,降低數(shù)據(jù)庫連接池的資源占用,減輕數(shù)據(jù)庫壓力,提高數(shù)據(jù)庫連接獲取效率。
[0104]本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
[0105]專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
[0106]對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【主權(quán)項】
1.一種基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法,其特征在于,包括: 接收數(shù)據(jù)庫連接獲取請求,確定所述數(shù)據(jù)庫連接獲取請求中當前訪問指令相對應(yīng)的數(shù)據(jù)源名稱; 若ThreadLocal連接容器開啟共享,貝Ij判斷所述ThreadLocal連接容器的HashMap中是否存在所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接; 若存在,則從所述ThreadLocal連接容器的HashMap中獲取所述數(shù)據(jù)庫連接;若不存在,則從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)庫連接,并將所述數(shù)據(jù)庫連接放入所述ThreadLocal連接容器的HashMap中; 確定所述數(shù)據(jù)庫連接獲取請求中下一訪問指令相對應(yīng)的數(shù)據(jù)源名稱。2.根據(jù)權(quán)利要求1所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法,其特征在于,所述確定所述數(shù)據(jù)庫連接獲取請求相對應(yīng)的數(shù)據(jù)源名稱后還包括: 若所述ThreadLocal連接容器未開啟共享,則直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接。3.根據(jù)權(quán)利要求2所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法,其特征在于,從所述ThreadLocal連接容器的HashMap中獲取所述數(shù)據(jù)庫連接后,或從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)庫連接后,或直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接后還包括:根據(jù)獲取的數(shù)據(jù)庫連接訪問數(shù)據(jù)庫。4.根據(jù)權(quán)利要求3所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法,其特征在于,所述根據(jù)獲取的數(shù)據(jù)庫連接訪問數(shù)據(jù)庫包括: 根據(jù)獲取的數(shù)據(jù)庫連接向數(shù)據(jù)庫寫入數(shù)據(jù)、根據(jù)獲取的數(shù)據(jù)庫連接讀取所述數(shù)據(jù)庫內(nèi)數(shù)據(jù)、根據(jù)獲取的數(shù)據(jù)庫連接對所述數(shù)據(jù)庫內(nèi)數(shù)據(jù)進行刪除和根據(jù)獲取的數(shù)據(jù)庫連接對所述數(shù)據(jù)庫內(nèi)數(shù)據(jù)進行修改中的至少一種。5.根據(jù)權(quán)利要求3所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法,其特征在于, 若所述ThreadLocal連接容器開啟共享,則根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后還包括:關(guān)閉所述ThreadLocal連接容器的HashMap中所有數(shù)據(jù)庫連接,并清空所述ThreadLocal連接容器的HashMap ; 若所述ThreadLocal連接容器未開啟共享,則所述直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接后還包括:在所述ThreadLocal連接容器的自動關(guān)閉列表記錄所述直接從數(shù)據(jù)庫連接池中獲取的數(shù)據(jù)庫連接;所述根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后還包括:關(guān)閉所述ThreadLocal連接容器的自動關(guān)閉列表中記錄的數(shù)據(jù)庫連接,并清空所述ThreadLocal連接容器的自動關(guān)閉列表。6.根據(jù)權(quán)利要求3所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法,其特征在于, 若所述ThreadLocal連接容器開啟共享,則根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后還包括:關(guān)閉所述ThreadLocal連接容器的HashMap中所有數(shù)據(jù)庫連接相對應(yīng)的Statement; 若所述ThreadLocal連接容器未開啟共享,則根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后還包括:關(guān)閉所述ThreadLocal連接容器的自動關(guān)閉列表中記錄的數(shù)據(jù)庫連接相對應(yīng)的Statement ο7.一種基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取裝置,其特征在于,包括:接收模塊、判斷模塊、第一獲取模塊和第二獲取模塊;其中, 所述接收模塊,用于接收數(shù)據(jù)庫連接獲取請求,確定所述數(shù)據(jù)庫連接獲取請求中當前訪問指令相對應(yīng)的數(shù)據(jù)源名稱; 所述判斷模塊,用于當ThreadLocal連接容器開啟共享時,判斷所述ThreadLocal連接容器的HashMap中是否存在所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接; 所述第一獲取模塊,用于當所述判斷模塊判定所述ThreadLocal連接容器的HashMap中存在所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接時,從所述ThreadLocal連接容器的HashMap中獲取所述數(shù)據(jù)庫連接; 所述第二獲取模塊,用于當所述判斷模塊判定所述ThreadLocal連接容器的HashMap中不存在所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接時,從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)庫連接,并將所述數(shù)據(jù)庫連接放入所述ThreadLocal連接容器的HashMap中。8.根據(jù)權(quán)利要求7所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取裝置,其特征在于,還包括:第三獲取模塊,用于當所述ThreadLocal連接容器未開啟共享時,直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接。9.根據(jù)權(quán)利要求8所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取裝置,其特征在于,還包括:數(shù)據(jù)訪問模塊,用于在所述第一獲取模塊從所述ThreadLocal連接容器的HashMap中獲取所述數(shù)據(jù)庫連接后,或在所述第二獲取模塊從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)庫連接后,或在所述第三獲取模塊直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接后,根據(jù)獲取的數(shù)據(jù)庫連接訪問數(shù)據(jù)庫。10.根據(jù)權(quán)利要求8所述的基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取裝置,其特征在于,還包括:第一連接關(guān)閉模塊、記錄模塊和第二連接關(guān)閉模塊; 所述第一連接關(guān)閉模塊,用于當所述ThreadLocal連接容器開啟共享時,所述數(shù)據(jù)訪問模塊根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后,關(guān)閉所述ThreadLocal連接容器的HashMap中所有數(shù)據(jù)庫連接,并清空所述ThreadLocal連接容器的HashMap; 所述記錄模塊,用于所述第三獲取模塊直接從數(shù)據(jù)庫連接池中獲取所述數(shù)據(jù)源名稱相對應(yīng)的數(shù)據(jù)庫連接后,在所述ThreadLocal連接容器的自動關(guān)閉列表記錄所述直接從數(shù)據(jù)庫連接池中獲取的數(shù)據(jù)庫連接; 所述第二連接關(guān)閉模塊,用于當所述ThreadLocal連接容器未開啟共享時,所述數(shù)據(jù)訪問模塊根據(jù)所述數(shù)據(jù)庫連接獲取請求中所有訪問指令訪問數(shù)據(jù)庫完成后,關(guān)閉所述ThreadLocal連接容器的自動關(guān)閉列表中記錄的數(shù)據(jù)庫連接,并清空所述ThreadLocal連接容器的自動關(guān)閉列表。
【專利摘要】本發(fā)明提供一基于ThreadLocal連接容器的數(shù)據(jù)庫連接獲取方法和裝置,方法包括:接收數(shù)據(jù)庫連接獲取請求,確定當前訪問指令對應(yīng)的數(shù)據(jù)源名稱;若ThreadLocal連接容器開啟共享,則判斷該ThreadLocal連接容器HashMap中是否存在該數(shù)據(jù)源名稱對應(yīng)的數(shù)據(jù)庫連接;若存在,則從ThreadLocal連接容器的HashMap中獲取該數(shù)據(jù)庫連接;若不存在,則從數(shù)據(jù)庫連接池中獲取該數(shù)據(jù)庫連接,將該數(shù)據(jù)庫連接放入ThreadLocal連接容器HashMap中;確定下一訪問指令對應(yīng)的數(shù)據(jù)源名稱??杀苊饷看尉鶑臄?shù)據(jù)庫連接池中創(chuàng)建連接,減少在數(shù)據(jù)庫連接池中獲取數(shù)據(jù)庫連接的次數(shù),提高數(shù)據(jù)庫連接的使用效率,降低數(shù)據(jù)庫連接池的資源占用,減輕數(shù)據(jù)庫壓力,提高數(shù)據(jù)庫連接獲取效率。
【IPC分類】G06F17/30
【公開號】CN105701163
【申請?zhí)枴緾N201511030559
【發(fā)明人】高隆林, 厲穎, 韓峰, 何忠勝, 趙欣, 李得亮
【申請人】山東中創(chuàng)軟件工程股份有限公司
【公開日】2016年6月22日
【申請日】2015年12月31日