本發(fā)明涉及數(shù)據(jù)庫訪問技術領域,特別是涉及一種數(shù)據(jù)庫連接的控制方法及裝置。
背景技術:
應用程序在開發(fā)使用過程中,通過訪問數(shù)據(jù)庫獲取其所需要的數(shù)據(jù)。在訪問數(shù)據(jù)庫時,應用程序使用數(shù)據(jù)庫連接與數(shù)據(jù)庫進行交互,具體實施方式如下:應用程序請求并創(chuàng)建數(shù)據(jù)庫連接,基于該數(shù)據(jù)庫連接對數(shù)據(jù)庫進行訪問,訪問完畢后,關閉該數(shù)據(jù)庫連接,釋放數(shù)據(jù)庫連接資源。其中,在關閉數(shù)據(jù)庫連接時,需要調(diào)用關閉數(shù)據(jù)庫連接的函數(shù),將該數(shù)據(jù)庫連接進行關閉。但是在實際實施過程中,當應用程序無需訪問數(shù)據(jù)庫時,可能因為各種原因,沒有對數(shù)據(jù)庫連接進行釋放,該數(shù)據(jù)庫連接會一直維持,直到關閉或者重啟該數(shù)據(jù)庫時,才會關閉該數(shù)據(jù)庫連接,造成數(shù)據(jù)庫資源的浪費。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提供的一種數(shù)據(jù)庫連接的控制方法及裝置,主要目的在于解決當應用程序無需訪問數(shù)據(jù)庫時,可能因為各種原因沒有對數(shù)據(jù)庫連接進行釋放,該數(shù)據(jù)庫連接會一直維持,直到關閉或者重啟該數(shù)據(jù)庫時,才會關閉該數(shù)據(jù)庫連接,造成數(shù)據(jù)庫資源浪費的問題。
為了解決上述問題,本發(fā)明主要提供如下技術方案:
一方面,本發(fā)明提供了一種數(shù)據(jù)庫連接的控制方法,該方法包括:
在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控所述數(shù)據(jù)庫連接的監(jiān)控線程;
啟動所述監(jiān)控線程,監(jiān)控所述數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值;其中,所述數(shù)據(jù)庫連接的空閑時間為所述數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間之間的時間間隔;
若所述數(shù)據(jù)庫連接的空閑時間超出所述預設時間閾值,則釋放所述數(shù) 據(jù)庫連接,并停止所述監(jiān)控線程。
另一方面,本發(fā)明還提供一種數(shù)據(jù)庫連接的控制裝置,該裝置包括:
創(chuàng)建單元,用于在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控所述數(shù)據(jù)庫連接的監(jiān)控線程;
啟動單元,用于啟動所述創(chuàng)建單元創(chuàng)建的所述監(jiān)控線程;
監(jiān)控單元,用于監(jiān)控所述數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值;其中,所述數(shù)據(jù)庫連接的空閑時間為所述數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間之間的時間間隔;
釋放單元,用于當所述監(jiān)控單元監(jiān)控的所述數(shù)據(jù)庫連接的空閑時間超出所述預設時間閾值時,釋放所述數(shù)據(jù)庫連接;
停止單元,用于在所述釋放單元釋放所述數(shù)據(jù)庫連接時,停止所述監(jiān)控線程。
借由上述技術方案,本發(fā)明提供的技術方案至少具有下列優(yōu)點:
本發(fā)明提供的數(shù)據(jù)庫連接的控制方法及裝置,在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控該數(shù)據(jù)庫連接的監(jiān)控線程,該監(jiān)控線程在啟動后,監(jiān)控該數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,其中,該數(shù)據(jù)庫連接的空閑時間為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間兩者之間的時間間隔,當數(shù)據(jù)庫連接的空閑時間超出預設時間閾值時,釋放該數(shù)據(jù)庫連接,并停止監(jiān)控線程;與現(xiàn)有技術相比,本發(fā)明基于監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接的空閑時間,即應用程序在該空閑時間內(nèi)未訪問數(shù)據(jù)庫,當監(jiān)控到該數(shù)據(jù)庫連接的空閑時間超過預設時間閾值時,將該數(shù)據(jù)庫連接進行釋放,節(jié)省了數(shù)據(jù)庫資源。
上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目 的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例提供的一種數(shù)據(jù)庫連接的控制方法的流程圖;
圖2示出了本發(fā)明實施例提供的監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值的方法流程圖;
圖3示出了本發(fā)明實施例提供的一種數(shù)據(jù)庫連接的控制裝置的組成框圖;
圖4示出了本發(fā)明實施例提供的另一種數(shù)據(jù)庫連接的控制裝置的組成框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
本發(fā)明實施例提供一種數(shù)據(jù)庫連接的控制方法,如圖1所示,該方法包括:
101、在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控數(shù)據(jù)庫連接的監(jiān)控線程。
在創(chuàng)建數(shù)據(jù)庫連接之前,終端設備中安裝的應用程序向數(shù)據(jù)庫發(fā)送建立數(shù)據(jù)庫連接的請求信息,當數(shù)據(jù)庫允許該應用程序創(chuàng)建數(shù)據(jù)庫連接時,應用程序創(chuàng)建數(shù)據(jù)庫連接,基于創(chuàng)建的數(shù)據(jù)庫連接,創(chuàng)建監(jiān)控數(shù)據(jù)庫連接的監(jiān)控線程。在本發(fā)明實施例中,所述終端設備包括但不局限于:個人電腦(personal computer,PC)、便攜式電腦、平板電腦、智能手機等等。
在本發(fā)明實施例中,創(chuàng)建監(jiān)控線程時,可以在創(chuàng)建數(shù)據(jù)庫連接之后,創(chuàng)建監(jiān)控線程;或者,也可以在數(shù)據(jù)庫允許應用程序建立數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控線程。需要說明的是,創(chuàng)建監(jiān)控線程的目的在于監(jiān)控數(shù)據(jù)庫連接,本發(fā)明實施例在具體實施時,采用在數(shù)據(jù)庫允許應用程序建立數(shù)據(jù)庫連接 時,創(chuàng)建監(jiān)控線程,能夠對數(shù)據(jù)庫連接起到更好的監(jiān)控作用。本發(fā)明實施例對創(chuàng)建監(jiān)控線程的具體時機不進行限定。
102、啟動監(jiān)控線程,監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值。
步驟101中創(chuàng)建的監(jiān)控線程處于未激活狀態(tài),即該監(jiān)控線程未啟動。為了能夠讓該監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接,需要將該監(jiān)控線程進行啟動,啟動后的該監(jiān)控線程能夠監(jiān)控數(shù)據(jù)庫連接的空閑時間,其中,所述空閑時間為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間之間的時間間隔,當空閑時間超出預設時間閾值時,執(zhí)行步驟103。
為了能夠更好的理解數(shù)據(jù)庫連接的空閑時間,以下將以具體示例進行說明?;跀?shù)據(jù)庫連接執(zhí)行數(shù)據(jù)庫操作指令時,更新本次執(zhí)行數(shù)據(jù)庫操作指令對應的時間,示例性的,假設,應用程序在創(chuàng)建數(shù)據(jù)庫連接及創(chuàng)建監(jiān)控線程的系統(tǒng)當前時間為08:00,將創(chuàng)建數(shù)據(jù)庫連接時的時間08:00作為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間,即使用創(chuàng)建數(shù)據(jù)庫連接的時間08:00對最終執(zhí)行數(shù)據(jù)庫操作指令的時間進行初始化;若該應用程序在08:05對數(shù)據(jù)庫執(zhí)行數(shù)據(jù)庫操作指令,則將數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間更新為08:05;在08:15,監(jiān)控線程對數(shù)據(jù)庫連接進行監(jiān)控,所述數(shù)據(jù)庫連接的空閑時間為08:15-08:05之間的差值10分鐘,監(jiān)控線程基于空閑時間與預設時間閾值對數(shù)據(jù)庫連接進行監(jiān)控。以上僅為示例性的舉例,本發(fā)明對此不進行任何限定。
其中,所述預設時間閾值是經(jīng)驗值,在設置預設時間閾值時,可以根據(jù)應用程序對數(shù)據(jù)庫訪問的實際需求進行確定,例如,若該應用程序的執(zhí)行需要持續(xù)不斷的獲取數(shù)據(jù)庫中的相關數(shù)據(jù),則可以將該預設時間閾值設置為12小時或者10小時;若該應用程序僅僅需要獲取數(shù)據(jù)庫中的某一個調(diào)用參數(shù),則可以將該預設時間閾值設置為10分鐘或者15分鐘。以上僅為示例性的舉例,本發(fā)明實施例對預設時間閾值設置的具體值不進行限定。
在本發(fā)明實施例中,可以采用但不局限于以下的方式作為啟動監(jiān)控線程的時機,例如,在創(chuàng)建監(jiān)控線程時,啟動該監(jiān)控線程;或者,在創(chuàng)建監(jiān)控線程之后的預設時間間隔內(nèi),啟動該監(jiān)控線程;在本發(fā)明實施例中,所 述數(shù)據(jù)庫操作指令可以包括但不局限于以下內(nèi)容:刪除數(shù)據(jù)庫內(nèi)容、查看數(shù)據(jù)庫內(nèi)容、增加數(shù)據(jù)庫內(nèi)容、釋放數(shù)據(jù)庫連接等等;本發(fā)明實施例對監(jiān)控線程啟動的時機以及數(shù)據(jù)庫操作指令的具體內(nèi)容不進行限定。
103、若數(shù)據(jù)庫連接的空閑時間超出預設時間閾值,則釋放數(shù)據(jù)庫連接,并停止監(jiān)控線程。
當數(shù)據(jù)庫連接的空閑時間超出預設時間閾值時,說明在該空閑時間內(nèi),應用程序未訪問數(shù)據(jù)庫,因此,將該數(shù)據(jù)庫連接進行釋放,并停止該監(jiān)控線程,將該監(jiān)控線程進行撤銷。監(jiān)控線程通過調(diào)用釋放該數(shù)據(jù)庫連接的預置函數(shù)將數(shù)據(jù)庫連接進行釋放,需要說明的是,由于應用程序訪問的數(shù)據(jù)庫類型可能存在差異,因此,在調(diào)用預置函數(shù)時,該預置函數(shù)所使用的函數(shù)名、預置函數(shù)調(diào)用的參數(shù)也可能存在差異,因此,在調(diào)用預置函數(shù)釋放數(shù)據(jù)庫連接時,要基于不同的數(shù)據(jù)庫類型確定調(diào)用的預置函數(shù)。本發(fā)明實施例所述的數(shù)據(jù)庫類型包括但不局限于以下內(nèi)容:例如,DB2、SQL Server、Sybase、Informix、MySQL、VF、Access等等,本發(fā)明實施例對數(shù)據(jù)庫類型、調(diào)用釋放數(shù)據(jù)庫連接的預置函數(shù)不進行具體限定。
本發(fā)明實施例提供的數(shù)據(jù)庫連接控制的方法,在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控該數(shù)據(jù)庫連接的監(jiān)控線程,啟動該監(jiān)控線程后監(jiān)控該數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,其中,該空閑時間為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間之間的時間間隔,當數(shù)據(jù)庫連接的空閑時間超出預設時間閾值時,釋放該數(shù)據(jù)庫連接,并停止監(jiān)控線程;與現(xiàn)有技術相比,本發(fā)明基于監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接的空閑時間,即應用程序在該空閑時間內(nèi)未訪問數(shù)據(jù)庫,當監(jiān)控到該空閑時間超過預設時間閾值時,將該數(shù)據(jù)庫連接進行自動釋放,節(jié)省了數(shù)據(jù)庫資源。
進一步的,在監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值時,可以采用但不局限于以下方法實現(xiàn),如圖2所示,該方法包括:
201、獲取第一時間。
其中,該第一時間為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間。在獲取第一時間時,首先,檢測第一時間是否處于加鎖狀態(tài),所述加鎖狀態(tài)下的第一時間不可能被兩個不同的線程同時得到,即當數(shù)據(jù)庫連接中的數(shù) 據(jù)庫操作指令正在執(zhí)行并且不斷的更新該第一時間時,此時其他線程(包括監(jiān)控線程)無法獲取該第一時間。若第一時間未處于加鎖狀態(tài),則調(diào)用預設函數(shù)獲取第一時間;若第一時間處于加鎖狀態(tài),則監(jiān)控線程需要在獲取第一時間的等待隊列中,等待第一時間解鎖之后,調(diào)用預設函數(shù)獲取第一時間。在調(diào)用預設函數(shù)獲取第一時間時,采用現(xiàn)有技術中任何一種獲取第一時間的方式,本發(fā)明實施例在此不再對預設函數(shù)進行贅述。
需要說明的是,在具體實施本發(fā)明實施例時,監(jiān)控線程基于預設監(jiān)控周期執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,若檢測到第一時間處于加鎖狀態(tài),監(jiān)控線程在獲取第一時間對應的等待隊列中等待第一時間解鎖的過程中,此時監(jiān)控線程執(zhí)行下一個預設監(jiān)控周期,則將執(zhí)行的兩次監(jiān)控線程都放入獲取第一時間的等待隊列中。示例性的,在09:20檢測到第一時間處于加鎖狀態(tài),將監(jiān)控線程加入到獲取第一時間的等待隊列中,等待第一時間的解鎖;若預設監(jiān)控周期為20分鐘,在09:40監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,檢測到第一時間仍處于加鎖狀態(tài),將該次監(jiān)控線程接入到獲取第一時間的等待隊列中,等待第一時間的解鎖;在09:50,該第一時間進行解鎖,監(jiān)控線程獲取第一時間。在09:20-09:50的時間間隔內(nèi),執(zhí)行了兩個監(jiān)控線程,但在實際運行過程中,只返回一個第一時間,該第一時間為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間。
202、獲取第二時間。
其中,所述第二時間為系統(tǒng)當前時間。在獲取第二時間時,要根據(jù)應用程序、監(jiān)控線程編程語言的不同以及數(shù)據(jù)庫類型的不同,采用相應獲取第二時間的方法。例如,若應用程序、監(jiān)控線程采用的VB編程語言,則使用DWORD GetTickCount()獲取第二時間,本發(fā)明實施例對獲取第二時間的方法不進行限定。
203、計算第一時間與第二時間的差值,獲得數(shù)據(jù)庫連接的空閑時間。
基于步驟201獲取的第一時間以及步驟202獲取的第二時間,將第一時間及第二時間進行差值計算,獲取數(shù)據(jù)庫連接的空閑時間。
204、判斷數(shù)據(jù)庫連接的空閑時間是否超過時間閾值。
將步驟203中獲取的空閑時間與預設時間閾值進行比較,并判斷數(shù)據(jù)庫連接的空閑時間是否超過時間閾值。
進一步的,在創(chuàng)建數(shù)據(jù)庫連接之后,基于該數(shù)據(jù)庫連接執(zhí)行數(shù)據(jù)庫操作指令,具體包括:獲取數(shù)據(jù)庫操作指令,判斷該數(shù)據(jù)庫操作指令是否為釋放數(shù)據(jù)庫連接,當數(shù)據(jù)庫操作指令不為釋放數(shù)據(jù)庫連接時,執(zhí)行該數(shù)據(jù)庫操作指令,并更新數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間;當數(shù)據(jù)庫操作指令為釋放數(shù)據(jù)庫連接時,執(zhí)行釋放數(shù)據(jù)庫連接,并輸出顯示執(zhí)行數(shù)據(jù)庫操作指令對應的操作結果。
需要說明的是,獲取數(shù)據(jù)庫操作指令與監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接的空閑時間兩者的執(zhí)行互不影響、互不干擾,在實際的運行過程中,以執(zhí)行數(shù)據(jù)庫操作指令為主。示例性的,當數(shù)據(jù)庫操作指令執(zhí)行釋放數(shù)據(jù)庫連接時,即使監(jiān)控線程監(jiān)控的數(shù)據(jù)庫連接的空閑時間未超過預設時間閾值,同樣會執(zhí)行釋放該數(shù)據(jù)庫連接。
進一步的,作為對上述實施例的細化和擴展,在執(zhí)行上述步驟102監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值時,若數(shù)據(jù)庫連接的空閑時間超出預設時間閾值,則釋放所述數(shù)據(jù)庫連接,并停止所述監(jiān)控線程;若數(shù)據(jù)庫連接的空閑時間未超出預設時間閾值,則維持該數(shù)據(jù)庫連接,并且繼續(xù)執(zhí)行監(jiān)控線程。在本發(fā)明實施例中,在監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接的空閑時間時,可以實時執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,也可以按照預設監(jiān)控周期執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值。
在本發(fā)明實施例的一種實現(xiàn)方式中,當實時執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值時,若監(jiān)控到空閑時間超出預設時間閾值,則能夠及時將該數(shù)據(jù)庫連接進行釋放,但是,在實時監(jiān)控數(shù)據(jù)庫連接的空閑時間時,需要消耗一定的處理資源;在本發(fā)明實施例的另一種實現(xiàn)方式中,監(jiān)控線程基于預設監(jiān)控周期執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,若在預設監(jiān)控周期內(nèi)監(jiān)控到空閑時間超出預設時間閾值,則將數(shù)據(jù)庫連接進行釋放。示例性的,假設,預設監(jiān)控周期為5分鐘,預設時間閾值為9分鐘,數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間為09:00, 監(jiān)控線程在09:05執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間,獲取數(shù)據(jù)庫連接的空閑時間為5分鐘(09:05-09:00),確定數(shù)據(jù)庫連接的空閑時間未超過預設時間閾值,繼續(xù)維持該數(shù)據(jù)庫連接,并繼續(xù)執(zhí)行監(jiān)控線程;監(jiān)控線程在09:10執(zhí)行監(jiān)控數(shù)據(jù)庫連接的空閑時間,獲取數(shù)據(jù)庫連接的空閑時間為10分鐘(09:10-09:00),確定數(shù)據(jù)庫連接的空閑時間10分鐘超出預設時間閾值9分鐘,將該數(shù)據(jù)庫連接進行釋放,并且停止該監(jiān)控線程。本發(fā)明實施例對監(jiān)控線程的預設監(jiān)控周期不進行具體限制。
進一步的,作為對步驟102啟動監(jiān)控線程的細化,在本發(fā)明實施例的一種實現(xiàn)方式中,根據(jù)需求發(fā)送啟動操作指令啟動監(jiān)控線程,可以在創(chuàng)建監(jiān)控線程后,同時發(fā)送啟動監(jiān)控線程的操作指令啟動該監(jiān)控線程;或者,可以在創(chuàng)建監(jiān)控線程后的2分鐘或者5分鐘的時間間隔內(nèi),發(fā)送啟動操作指令啟動該監(jiān)控線程;該種啟動監(jiān)控線程的方式需要應用程序用戶的手動操作啟動該監(jiān)控線程。在本發(fā)明實施例的另一種實現(xiàn)方式中,在創(chuàng)建監(jiān)控線程時,設置啟動監(jiān)控線程的啟動時間,根據(jù)啟動時間啟動該監(jiān)控線程;例如,假設,創(chuàng)建監(jiān)控線程的時間為12:00,此時,設置啟動該監(jiān)控線程的啟動時間為12:08,在12:08會自動啟動監(jiān)控線程;該種啟動監(jiān)控線程的方式無需應用程序用戶的手動操作。以上僅為示例性的舉例,本發(fā)明實施例對啟動監(jiān)控線程的具體時間不進行限定。
進一步的,作為對上述實施例的細化和擴展,上述步驟101中創(chuàng)建監(jiān)控線程時,調(diào)用預設應用程序編程接口(Application Programming Interface,API),創(chuàng)建監(jiān)控線程在創(chuàng)建監(jiān)控線程時,根據(jù)應用程序的編程語言的差異,確定該編程語言對應的創(chuàng)建監(jiān)控線程的方法。示例性的,對于編程語言Java而言,在創(chuàng)建監(jiān)控線程時,可以通過擴展Thread類來創(chuàng)建監(jiān)控線程;或者,也可以通過實現(xiàn)Runnable接口來創(chuàng)建監(jiān)控線程。本發(fā)明實施例對創(chuàng)建監(jiān)控線程的具體實現(xiàn)方式不進行限定。
可選的,在創(chuàng)建數(shù)據(jù)庫連接之后,設置事件監(jiān)控器,該事件監(jiān)控器用于監(jiān)控請求數(shù)據(jù)庫連接的應用程序是否退出,若監(jiān)控到該請求數(shù)據(jù)庫連接的應用程序退出,則調(diào)用關閉數(shù)據(jù)庫連接的預設函數(shù),執(zhí)行釋放數(shù)據(jù)庫連接,并停止所述監(jiān)控線程。事件監(jiān)控器通過系統(tǒng)調(diào)用,在應用程序用戶發(fā) 出退出該應用程序的指令信息,且在該指令信息沒有執(zhí)行退出該應用程序之前,事件監(jiān)控器就會先捕獲到該指令信息,對該指令信息進行加工,即調(diào)用關閉數(shù)據(jù)庫連接的預設函數(shù),釋放數(shù)據(jù)庫連接;執(zhí)行完釋放數(shù)據(jù)庫連接時,接著執(zhí)行退出該應用程序。
進一步的,作為對上述方法的實現(xiàn),本發(fā)明實施例還提供一種數(shù)據(jù)庫連接的控制裝置,如圖3所示,該裝置包括:
創(chuàng)建單元31,用于在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控所述數(shù)據(jù)庫連接的監(jiān)控線程;
啟動單元32,用于啟動所述創(chuàng)建單元31創(chuàng)建的所述監(jiān)控線程;
監(jiān)控單元33,用于監(jiān)控所述數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值;其中,所述空閑時間為所述數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間之間的時間間隔;
釋放單元34,用于當所述監(jiān)控單元33監(jiān)控的所述數(shù)據(jù)庫連接的空閑時間超出所述預設時間閾值時,釋放所述數(shù)據(jù)庫連接;
停止單元35,用于在所述釋放單元34釋放所述數(shù)據(jù)庫連接后,停止所述監(jiān)控線程。
進一步的,如圖4所示,所述監(jiān)控單元33包括:
第一獲取模塊331,用于獲取第一時間,所述第一時間為所述數(shù)據(jù)庫連接最終執(zhí)行所述數(shù)據(jù)庫操作指令的時間;
第二獲取模塊332,用于獲取第二時間,所述第二時間為系統(tǒng)當前時間;
處理模塊333,用于計算所述第一獲取模塊331獲取的所述第一時間與所述第二獲取模塊332獲取的所述第二時間的差值,獲得所述數(shù)據(jù)庫連接的空閑時間;
判斷模塊334,用于判斷所述處理模塊333獲取的所述空閑時間是否超過所述預設時間閾值。
進一步的,如圖4所示,所述第一獲取模塊331包括:
檢測子模塊3311,用于檢測所述第一時間是否處于加鎖狀態(tài),所述加鎖狀態(tài)為所述數(shù)據(jù)庫連接中的數(shù)據(jù)庫操作指令正在執(zhí)行時,對所述第一時間添加線程鎖,其他線程無法訪問加鎖狀態(tài)的所述第一時間;
獲取子模塊3312,用于當所述檢測子模塊3311檢測的所述第一時間未處于所述加鎖狀態(tài)時,調(diào)用預設函數(shù)獲取所述第一時間;
處理子模塊3313,用于當所述檢測子模塊3311檢測的所述第一時間處于所述加鎖狀態(tài),則將所述監(jiān)控線程加入獲取所述第一時間對應的等待隊列中,等待所述第一時間解鎖之后,調(diào)用預設函數(shù)獲取所述第一時間。
進一步的,如圖4所示,所述裝置還包括:
獲取單元36,用于在所述創(chuàng)建單元31創(chuàng)建數(shù)據(jù)庫連接之后,獲取所述數(shù)據(jù)庫操作指令;
判斷單元37,用于判斷所述獲取單元36獲取的所述數(shù)據(jù)庫操作指令是否為釋放所述數(shù)據(jù)庫連接;
執(zhí)行單元38,用于當所述判斷單元37判斷所述數(shù)據(jù)庫操作指令不為釋放所述數(shù)據(jù)庫連接,則執(zhí)行所述數(shù)據(jù)庫操作指令;
更新單元39,用于更新所述執(zhí)行單元38執(zhí)行所述數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間;
所述釋放單元34,還用于所述判斷單元37判斷所述數(shù)據(jù)庫操作指令為釋放所述數(shù)據(jù)庫連接,則執(zhí)行釋放所述數(shù)據(jù)庫連接。
進一步的,如圖4所示,所述裝置還包括:
處理單元310,用于當所述監(jiān)控單元33監(jiān)控的所述數(shù)據(jù)庫連接的空閑時間未超出所述預設時間閾值時,維持所述數(shù)據(jù)庫連接,并繼續(xù)執(zhí)行所述監(jiān)控線程。
進一步的,所述監(jiān)控單元33,還用于實時或者按照預設監(jiān)控周期執(zhí)行所述監(jiān)控所述數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值。
進一步的,如圖4所示,所述啟動單元32包括:
發(fā)送模塊321,用于根據(jù)需求發(fā)送啟動操作指令啟動所述監(jiān)控線程;
設置模塊322,用于在創(chuàng)建所述監(jiān)控線程時,設置啟動所述監(jiān)控線程的啟動時間,根據(jù)所述啟動時間啟動所述監(jiān)控線程。
進一步的,所述創(chuàng)建單元31,還用于調(diào)用預置應用程序編程接口,創(chuàng)建所述監(jiān)控線程。
進一步的,如圖4所示,所述裝置還包括:
顯示單元311,用于在所述執(zhí)行單元38執(zhí)行所述數(shù)據(jù)庫操作指令之后,輸出顯示執(zhí)行所述數(shù)據(jù)庫操作指令對應的操作結果。
本發(fā)明實施例提供的數(shù)據(jù)庫連接控制的裝置,在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建監(jiān)控該數(shù)據(jù)庫連接的監(jiān)控線程,啟動該監(jiān)控線程后監(jiān)控該數(shù)據(jù)庫連接的空閑時間是否超出預設時間閾值,其中,該空閑時間為數(shù)據(jù)庫連接最終執(zhí)行數(shù)據(jù)庫操作指令的時間與系統(tǒng)當前時間之間的時間間隔,當數(shù)據(jù)庫連接的空閑時間超出預設時間閾值時,釋放該數(shù)據(jù)庫連接,并停止監(jiān)控線程;與現(xiàn)有技術相比,本發(fā)明基于監(jiān)控線程監(jiān)控數(shù)據(jù)庫連接的空閑時間,即應用程序在該空閑時間內(nèi)未訪問數(shù)據(jù)庫,當監(jiān)控到該空閑時間超過預設時間閾值時,將該數(shù)據(jù)庫連接進行自動釋放,節(jié)省了數(shù)據(jù)庫資源。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
可以理解的是,上述方法及裝置中的相關特征可以相互參考。另外,上述實施例中的“第一”、“第二”等是用于區(qū)分各實施例,而并不代表各實施例的優(yōu)劣。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構造這類系統(tǒng)所要求的結構是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征 有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發(fā)明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的發(fā)明名稱(如確定網(wǎng)站內(nèi)鏈接等級的裝置)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限 制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。