国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      業(yè)務執(zhí)行方法及服務器的制造方法

      文檔序號:10552818閱讀:542來源:國知局
      業(yè)務執(zhí)行方法及服務器的制造方法
      【專利摘要】本發(fā)明公開了一種業(yè)務執(zhí)行方法,包括:所述業(yè)務服務器在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務請求對應的主業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解;若存在,則將所述日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與所述主線程異步的支線程任務池;在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池對接收到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫中。本發(fā)明還公開了一種服務器。本發(fā)明降低了主業(yè)務與輔業(yè)務之間的耦合性,提高了服務器執(zhí)行業(yè)務的性能及易擴展性。
      【專利說明】
      業(yè)務執(zhí)行方法及服務器
      技術(shù)領(lǐng)域
      [0001 ]本發(fā)明涉及服務器技術(shù)領(lǐng)域,尤其涉及一種業(yè)務執(zhí)行方法及服務器。
      【背景技術(shù)】
      [0002] 通常在應用程序(Application,APP)、無線應用協(xié)議(Wireless Application Protocol,WAP)或網(wǎng)站(Website,WEB)等執(zhí)行較為重要的業(yè)務操作時,服務器將執(zhí)行的業(yè)務 分為主業(yè)務和輔業(yè)務,需要對主業(yè)務執(zhí)行過程中每個業(yè)務環(huán)節(jié)的業(yè)務數(shù)據(jù)變更進行日志記 錄,進行日志記錄即為輔業(yè)務的執(zhí)行,以便于根據(jù)記錄的日志進行軌跡追蹤或業(yè)務系統(tǒng)崩 潰后業(yè)務數(shù)據(jù)可恢復。以應用商店系統(tǒng)中安卓安裝包(Android Package,APK)上傳運營這 一業(yè)務為例,運營人員在上傳一個應用的新版本APK至服務器時,服務器需要執(zhí)行APK信息 解析、應用新版本數(shù)據(jù)創(chuàng)建、應用主表信息修改等主業(yè)務,并且在主業(yè)務執(zhí)行的開始與結(jié)束 時需執(zhí)行輔業(yè)務對業(yè)務數(shù)據(jù)的變化進行記錄,即進行日志記錄。通過所記錄的日志,不但可 以清晰的獲知APK上傳時業(yè)務數(shù)據(jù)的變更,而且一旦執(zhí)行業(yè)務的業(yè)務系統(tǒng)突然崩潰,可以根 據(jù)這些日志進行數(shù)據(jù)恢復與清理。
      [0003] 目前,在服務器執(zhí)行主業(yè)務與輔業(yè)務的過程中,將主業(yè)務與輔業(yè)務混合在同一個 線程上執(zhí)行,即將主業(yè)務與日志記錄混合在同一個線程上執(zhí)行。這種做法,一方面造成主業(yè) 務與輔業(yè)務的高度耦合,不利于服務器對應的業(yè)務系統(tǒng)進行后期拓展;另外一方面由于記 錄日志需要與數(shù)據(jù)庫打交道,從而延長了業(yè)務處理的時長,損耗了服務器執(zhí)行業(yè)務的性能。

      【發(fā)明內(nèi)容】

      [0004] 本發(fā)明的主要目的在于提供一種業(yè)務執(zhí)行方法及服務器,旨在降低主業(yè)務與輔業(yè) 務之間的耦合性,提高服務器執(zhí)行業(yè)務的性能及易擴展性。
      [0005] 為實現(xiàn)上述目的,本發(fā)明提供了一種服務器,所述服務器包括業(yè)務服務器,所述業(yè) 務服務器包括:
      [0006] 判斷模塊,用于在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務請求對應 的主業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解;
      [0007] 傳送模塊,用于若各業(yè)務層對應的執(zhí)行步驟中存在執(zhí)行輔業(yè)務的日志注解,則將 所述日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與所述主線程異步的支線程任務 池;
      [0008] 控制模塊,用于在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池對 接收到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至 預置的存儲數(shù)據(jù)庫中。
      [0009] 可選地,所述服務器還包括日志服務器,所述日志服務器包括:
      [0010]記錄模塊,用于在偵測到所述存儲數(shù)據(jù)庫中存儲有所述預設格式的數(shù)據(jù)時,啟動 相應的任務線程將所述預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對所述日志注解對應 的日志進行記錄。
      [0011] 可選地,所述各業(yè)務層包括控制層、業(yè)務層及數(shù)據(jù)邏輯層,所述判斷模塊還用于, 先判斷所述控制層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,在所述控制層內(nèi)部 調(diào)用所述業(yè)務層時,再判斷所述業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注 解;然后在所述業(yè)務層內(nèi)部調(diào)用所述數(shù)據(jù)邏輯層時,判斷所述數(shù)據(jù)邏輯層對應的執(zhí)行步驟 中是否存在執(zhí)行輔業(yè)務的日志注解。
      [0012] 可選地,所述相關(guān)信息包括參數(shù)信息及結(jié)構(gòu)化查詢語言模版,所述預設格式包括 結(jié)構(gòu)化查詢語言語句格式,所述控制模塊還用于,控制所述支線程任務池根據(jù)接收到的所 述結(jié)構(gòu)化查詢語言模版,將所述參數(shù)信息封裝為結(jié)構(gòu)化查詢語言語句格式的數(shù)據(jù)。
      [0013] 可選地,所述日志注解包括在當前步驟執(zhí)行前插入一條日志、在當前步驟執(zhí)行結(jié) 束后插入一條日志、在當前步驟執(zhí)行前與執(zhí)行后各插入一條日志、在當前步驟執(zhí)行出現(xiàn)異 常時插入一條日志及在當前步驟需要返回結(jié)果時執(zhí)行結(jié)束后插入一條日志。
      [0014] 此外,為實現(xiàn)上述目的,本發(fā)明還提供了一種業(yè)務執(zhí)行方法,所述業(yè)務執(zhí)行方法應 用于服務器,所述服務器包括業(yè)務服務器,所述業(yè)務包括主業(yè)務和輔業(yè)務,所述業(yè)務執(zhí)行方 法包括以下步驟:
      [0015] 所述業(yè)務服務器在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務請求對應 的主業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解;
      [0016] 若存在,則將所述日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與所述主線 程異步的支線程任務池;
      [0017] 在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池對接收到的所述日 志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù) 庫中。
      [0018] 可選地,所述服務器還包括日志服務器,所述控制所述支線程任務池對接收到的 所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至預置的存 儲數(shù)據(jù)庫中之后包括:
      [0019] 所述日志服務器在偵測到所述存儲數(shù)據(jù)庫中存儲有所述預設格式的數(shù)據(jù)時,啟動 相應的任務線程將所述預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對所述日志注解對應 的日志進行記錄。
      [0020] 可選地,所述各業(yè)務層包括控制層、業(yè)務層及數(shù)據(jù)邏輯層,所述依次判斷各業(yè)務層 對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解包括:
      [0021 ]先判斷所述控制層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,在所述控 制層內(nèi)部調(diào)用所述業(yè)務層時,再判斷所述業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的 日志注解;然后在所述業(yè)務層內(nèi)部調(diào)用所述數(shù)據(jù)邏輯層時,判斷所述數(shù)據(jù)邏輯層對應的執(zhí) 行步驟中是否存在執(zhí)行輔業(yè)務的日志注解。
      [0022] 可選地,所述相關(guān)信息包括參數(shù)信息及結(jié)構(gòu)化查詢語言模版,所述預設格式包括 結(jié)構(gòu)化查詢語言語句格式,所述控制所述支線程任務池對接收到的所述日志注解的相關(guān)信 息封裝為預設格式的數(shù)據(jù)包括:
      [0023] 控制所述支線程任務池根據(jù)接收到的所述結(jié)構(gòu)化查詢語言模版,將所述參數(shù)信息 封裝為結(jié)構(gòu)化查詢語言語句格式的數(shù)據(jù)。
      [0024] 可選地,所述日志注解包括在當前步驟執(zhí)行前插入一條日志、在當前步驟執(zhí)行結(jié) 束后插入一條日志、在當前步驟執(zhí)行前與執(zhí)行后各插入一條日志、在當前步驟執(zhí)行出現(xiàn)異 常時插入一條日志及在當前步驟需要返回結(jié)果時執(zhí)行結(jié)束后插入一條日志。
      [0025] 本發(fā)明實施例業(yè)務服務器通過主線程執(zhí)行業(yè)務請求對應的主業(yè)務,并當各業(yè)務層 對應的執(zhí)行步驟中存在執(zhí)行輔業(yè)務的日志注解時,將該日志注解的相關(guān)信息傳送至支線程 任務池。在主線程執(zhí)行主業(yè)務的同時,控制支線程任務池對日志注解的相關(guān)信息封裝為預 設格式的數(shù)據(jù)存儲至存儲數(shù)據(jù)庫中,以供日志服務器從存儲數(shù)據(jù)庫中獲取數(shù)據(jù)寫入日志數(shù) 據(jù)庫中。從而可以通過將主業(yè)務與輔業(yè)務分別在主線程與支線程上執(zhí)行,并分別設置業(yè)務 服務器與日志服務器及其對應的數(shù)據(jù)庫對相應的數(shù)據(jù)進行存儲。相對于現(xiàn)有技術(shù)中將主業(yè) 務與輔業(yè)務混合在同一線程上執(zhí)行,降低了主業(yè)務與輔業(yè)務之間的耦合性,提高了服務器 執(zhí)行業(yè)務的性能及易擴展性。
      【附圖說明】
      [0026] 圖1為本發(fā)明服務器一實施例的功能模塊示意圖;
      [0027] 圖2為本發(fā)明服務器執(zhí)行業(yè)務的結(jié)構(gòu)示意圖;
      [0028] 圖3為本發(fā)明服務器另一實施例的功能模塊示意圖;
      [0029] 圖4為本發(fā)明業(yè)務執(zhí)行方法一實施例的流程示意圖;
      [0030] 圖5為本發(fā)明業(yè)務執(zhí)行方法另一實施例的流程示意圖。
      [0031 ]本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
      【具體實施方式】
      [0032] 應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
      [0033] 如圖1所示,示出了本發(fā)明一種服務器第一實施例。該實施例的服務器包括業(yè)務服 務器,所述業(yè)務服務器包括:
      [0034] 判斷模塊10,用于在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務請求對 應的主業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解;
      [0035] 本實施例中,業(yè)務執(zhí)行方法應用于服務器,業(yè)務包括主業(yè)務和輔業(yè)務,主業(yè)務為該 業(yè)務的核心業(yè)務,輔業(yè)務為記錄日志等次要的業(yè)務??蛇x地,為了降低主業(yè)務和輔業(yè)務的耦 合性,主業(yè)務由主線程執(zhí)行,輔業(yè)務由支線程執(zhí)行,兩者之間互不干擾。同時,將服務器劃分 為業(yè)務服務器、日志服務器等,且業(yè)務服務器對應設置業(yè)務數(shù)據(jù)庫,用于存儲核心業(yè)務的相 關(guān)數(shù)據(jù);日志服務器對應設置日志數(shù)據(jù)庫,用于存儲記錄日志相關(guān)的數(shù)據(jù)。
      [0036]具體地,業(yè)務服務器偵測是否接收到客戶端的HTTP請求(即業(yè)務請求),該HTTP請 求是指從客戶端到服務器端的請求消息,包括:消息首行中,對資源的請求方法、資源的標 識符及使用的協(xié)議。當業(yè)務服務器接收到客戶端發(fā)送的業(yè)務請求時,業(yè)務服務器通過預置 的主線程執(zhí)行該業(yè)務請求對應的主業(yè)務,并由判斷模塊10依次判斷控制層、業(yè)務層及數(shù)據(jù) 邏輯層等各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,形成面向切面的注 解方式。
      [0037]需要說明的是,日志注解包括在當前步驟執(zhí)行前插入一條日志、在當前步驟執(zhí)行 結(jié)束后插入一條日志、在當前步驟執(zhí)行前與執(zhí)行后各插入一條日志、在當前步驟執(zhí)行出現(xiàn) 異常時插入一條日志及在當前步驟需要返回結(jié)果時執(zhí)行結(jié)束后插入一條日志。
      [0038]每個日志注解對應一個標簽,可根據(jù)業(yè)務的實際需要,設置日志注解的標簽對各 個業(yè)務層的邏輯步驟進行選擇性標記。例如,日志注解的標簽包括OLogBef ore、@ LogAf ter、OLogAround、OLogThrow及OLogReturn,不同的日志注解的標簽表達意義不同,相 同的或不同的日志注解的標簽可疊加使用。其中,
      [0039] OLogBefore表示在當前步驟執(zhí)行前插入一條日志;
      [0040] OLogAfter表示在當前步驟執(zhí)行結(jié)束后插入一條日志;
      [0041 ] OLogAround表示在當前步驟執(zhí)行前與后各插入一條日志;
      [0042] OLogThrow表示在當前步驟執(zhí)行出現(xiàn)異常時插入一條日志;
      [0043] OLogRe turn表示若當前步驟需要返回結(jié)果,則執(zhí)行結(jié)束后會插入一條日志。
      [0044] 傳送模塊20,用于若各業(yè)務層對應的執(zhí)行步驟中存在執(zhí)行輔業(yè)務的日志注解,則 將所述日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與所述主線程異步的支線程任 務池;
      [0045] 在判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解后,若各業(yè)務 層對應的執(zhí)行步驟中不存在執(zhí)行輔業(yè)務的日志注解,則說明業(yè)務服務器不需要通過支線程 執(zhí)行輔業(yè)務,即不需要執(zhí)行后續(xù)的相關(guān)步驟。若各業(yè)務層對應的執(zhí)行步驟中存在執(zhí)行輔業(yè) 務的日志注解,則業(yè)務服務器調(diào)用傳送模塊20將日志注解的相關(guān)信息傳送至預置的與主線 程異步的支線程任務池。日志注解的相關(guān)信息包括注解配置、參數(shù)信息、SQUStructured Query Language,結(jié)構(gòu)化查詢語言)模板、Cache緩存等信息。
      [0046] 控制模塊30,用于在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池 對接收到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲 至預置的存儲數(shù)據(jù)庫中。
      [0047] 業(yè)務服務器將日志注解的相關(guān)信息傳送至支線程任務池后,在主線程執(zhí)行主業(yè) 務,而控制模塊30控制支線程執(zhí)行輔業(yè)務,兩者之間是同步進行的,且互不干擾。控制模塊 30控制任務池在接收到注解配置、參數(shù)信息、SQL模板、Cache緩存等信息后,根據(jù)反射機制 對接收到的日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),實現(xiàn)對日志注解對應的日志進行 組裝。該預設格式的數(shù)據(jù)可包括SQL語句格式的數(shù)據(jù),反射機制可定義為動態(tài)提取日志注解 的相關(guān)信息進行寫日志。然后控制模塊30將預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫中, 該存儲數(shù)據(jù)庫可為Redis存儲隊列。從而使得主線程專注于核心業(yè)務處理,無損核心業(yè)務, 異步支線程則處理日志數(shù)據(jù),可很大程度上減少業(yè)務處理耗時,提升服務器對業(yè)務處理性 能。需要說明的是,存儲數(shù)據(jù)庫(即Redis存儲隊列)可設置于業(yè)務服務器內(nèi),也可單獨設置 存儲服務器對應該存儲數(shù)據(jù)庫,用于存儲預設格式的數(shù)據(jù)。
      [0048] 以下進行舉例說明,如圖2所示,服務器包括業(yè)務服務器和日志服務器,業(yè)務服務 器對應設置主業(yè)務數(shù)據(jù)庫,日志服務器對應設置日志存儲數(shù)據(jù)庫,存儲數(shù)據(jù)庫(即Redis存 儲隊列)單獨設置。具體地,當業(yè)務請求抵達業(yè)務服務器時,首先進入的是控制層,由主線程 執(zhí)行相應的步驟,在執(zhí)行步驟的過程中判斷對應的步驟中是否存在日志注解;若存在,則通 過面向切面的日志注解方式,獲取日志注解的相關(guān)信息,將日志注解的相關(guān)信息傳入支線 程任務池。當控制層內(nèi)部涉及業(yè)務層的調(diào)用時,在觸發(fā)執(zhí)行業(yè)務層相關(guān)步驟過程中,判斷業(yè) 務層對應的步驟中是否存在日志注解,若存在,則通過面向切面的日志注解方式,獲取該日 志注解的相關(guān)信息,將日志注解的相關(guān)信息傳入支線程任務池。同理,當業(yè)務層涉及數(shù)據(jù)邏 輯層的調(diào)用時,對日志注解的處理方法與業(yè)務層的相同。主線程執(zhí)行主業(yè)務操作產(chǎn)生的數(shù) 據(jù)將存儲在主業(yè)務數(shù)據(jù)庫中。支線程任務池在接收到日志注解的相關(guān)信息后,根據(jù)反射機 制,根據(jù)相關(guān)信息進行日志SQL語句格式的封裝形成SQL語句格式的數(shù)據(jù),并將SQL語句格式 的數(shù)據(jù)推入存儲數(shù)據(jù)庫中,該支線程任務池相當于類生產(chǎn)者。日志服務器的線程任務池實 時監(jiān)測存儲數(shù)據(jù)庫中是否存在數(shù)據(jù),線程任務池相當于類消費者。當存儲數(shù)據(jù)庫中存在數(shù) 據(jù)時,則線程任務池啟動相應的數(shù)量的分支線程,將存儲數(shù)據(jù)庫中的SQL語句格式的數(shù)據(jù)取 出,執(zhí)行將日志寫入日志存儲數(shù)據(jù)庫的操作。
      [0049] 業(yè)務服務器在主線程執(zhí)行主業(yè)務時對三大業(yè)務層次進行日志注解的監(jiān)控,實現(xiàn)主 業(yè)務與輔業(yè)務執(zhí)行的解耦,日志注解對應日志信息的封裝由支線程任務池處理;封裝好后 的日志信息以生產(chǎn)者模式傳入存儲數(shù)據(jù)庫中。日志記錄服務器以消費者模式不間斷從存儲 數(shù)據(jù)庫中提取流水日志信息,寫入獨立的日志存儲數(shù)據(jù)庫中。從而在使用面向切面注解方 式解耦主業(yè)務與輔業(yè)務執(zhí)行的基礎上,主業(yè)務數(shù)據(jù)庫與日志存儲數(shù)據(jù)庫實現(xiàn)分離,可加快 主業(yè)務的處理速度;且主業(yè)務的執(zhí)行、日志信息的封裝、日志服務器讀寫日志三者是同步執(zhí) 行,實現(xiàn)縮短執(zhí)行業(yè)務的耗時,加速業(yè)務功能的整體執(zhí)行效率。
      [0050] 本發(fā)明實施例業(yè)務服務器通過主線程執(zhí)行業(yè)務請求對應的主業(yè)務,并當各業(yè)務層 對應的執(zhí)行步驟中存在執(zhí)行輔業(yè)務的日志注解時,將該日志注解的相關(guān)信息傳送至支線程 任務池。在主線程執(zhí)行主業(yè)務的同時,控制支線程任務池對日志注解的相關(guān)信息封裝為預 設格式的數(shù)據(jù)存儲至存儲數(shù)據(jù)庫中,以供日志服務器從存儲數(shù)據(jù)庫中獲取數(shù)據(jù)寫入日志數(shù) 據(jù)庫中。從而可以通過將主業(yè)務與輔業(yè)務分別在主線程與支線程上執(zhí)行,并分別設置業(yè)務 服務器與日志服務器及其對應的數(shù)據(jù)庫對相應的數(shù)據(jù)進行存儲。相對于現(xiàn)有技術(shù)中將主業(yè) 務與輔業(yè)務混合在同一線程上執(zhí)行,降低了主業(yè)務與輔業(yè)務之間的耦合性,提高了服務器 執(zhí)行業(yè)務的性能及易擴展性,達到提升用戶體驗的目的。
      [0051] 進一步地,如圖3所示,基于上述服務器第一實施例,提出了本發(fā)明服務器第二實 施例,第二實施例與第一實施例的區(qū)別在于,該第二實施例中上述服務器還包括日志服務 器,所述日志服務器包括:
      [0052]記錄模塊40,用于在偵測到所述存儲數(shù)據(jù)庫中存儲有所述預設格式的數(shù)據(jù)時,啟 動相應的任務線程將所述預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對所述日志注解對 應的日志進行記錄。
      [0053]本實施例中,上述服務器還包括日志服務器,日志服務器實時偵測存儲數(shù)據(jù)庫(即 Redis存儲隊列)中的數(shù)據(jù)。在上述業(yè)務服務器將預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫 中后,日志服務器在偵測到存儲數(shù)據(jù)庫中存儲有預設格式的數(shù)據(jù)時,記錄模塊40啟動相應 的數(shù)量的任務線程將執(zhí)行將該預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對日志注解對 應的日志進行記錄,日志存儲數(shù)據(jù)庫中記錄日志的規(guī)范的一實施例可如表1所示,可以理解 的是,表1中記錄日志的規(guī)范也可以根據(jù)實際需要進行設置,并不限定本發(fā)明。
      [0054]需要說明的是,日志服務器的任務線程池中的分支線程數(shù)量是有限的,任務線程 池中任務線程數(shù)量的最大閾值可根據(jù)具體情況而靈活設置,日志服務器只能啟動到最大閾 值的數(shù)量的分支線程。在啟動分支線程的過程中,隨著存儲數(shù)據(jù)庫中數(shù)據(jù)的減少,相應的分 支線程也會被回收。例如,當預設格式的數(shù)據(jù)為SQL語句格式的數(shù)據(jù)時,記錄模塊40在偵測 到儲數(shù)據(jù)庫中存儲有一個SQL語句格式的數(shù)據(jù)時,啟動一個分支線程將儲數(shù)據(jù)庫中的SQL語 句格式的數(shù)據(jù)取出,將數(shù)據(jù)保存到日志存儲數(shù)據(jù)庫中。
      [0055]表1.日志存儲數(shù)據(jù)庫中記錄日志的規(guī)范
      [0058]在現(xiàn)有服務器執(zhí)行業(yè)務的過程中,由于是將主業(yè)務與輔業(yè)務耦合交錯在一起,以 串行方式執(zhí)行,因此,輔業(yè)務的執(zhí)行所消耗的時間無形中增加了整體業(yè)務的處理時長,損耗 了服務器對應執(zhí)行系統(tǒng)的性能。例如,業(yè)務執(zhí)行完畢需要耗時T0為5秒,其中,主業(yè)務執(zhí)行耗 時T1為3.3秒,輔業(yè)務執(zhí)行耗時T2為1.7秒。
      [0059] 而本實施例中,在使用面向切面注解方式解耦主業(yè)務與輔業(yè)務執(zhí)行的基礎上,主 業(yè)務與輔業(yè)務異步執(zhí)行,實現(xiàn)縮短甚至是消除執(zhí)行輔業(yè)務的耗時,加速業(yè)務功能的整體執(zhí) 行效率。例如,主業(yè)務執(zhí)行耗時T1為3.3秒,輔業(yè)務執(zhí)行耗時T2為1.7秒,兩者之間互不干擾。
      [0060] 本實施例通過日志服務器提取存儲數(shù)據(jù)庫中的數(shù)據(jù),啟動相應的任務線程將該數(shù) 據(jù)寫入日志數(shù)據(jù)庫中,以對日志注解對應的日志進行記錄。降低了主業(yè)務與輔業(yè)務之間的 耦合性,使得主線程專注于執(zhí)行主業(yè)務,支線程則執(zhí)行輔業(yè)務,減少了整體業(yè)務處理的耗 時,提升服務器對業(yè)務處理性能。
      [0061] 進一步地,基于上述服務器第一實施例,提出了本發(fā)明服務器第三實施例,第三實 施例與第一實施例的區(qū)別在于,該第三實施例中上述判斷模塊10還用于,先判斷所述控制 層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,在所述控制層內(nèi)部調(diào)用所述業(yè)務層 時,再判斷所述業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解;然后在所述業(yè) 務層內(nèi)部調(diào)用所述數(shù)據(jù)邏輯層時,判斷所述數(shù)據(jù)邏輯層對應的執(zhí)行步驟中是否存在執(zhí)行輔 業(yè)務的日志注解。
      [0062] 本實施例中,各業(yè)務層包括控制層、業(yè)務層及數(shù)據(jù)邏輯層,在判斷模塊10判斷各業(yè) 務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解的過程中,當業(yè)務請求達到業(yè)務服 務器時,首先進入控制層(即Controller層),并調(diào)用預置的監(jiān)控程序判斷對應的步驟中是 否有日志注解。若存在,則通過面向切面的日志注解方式,獲取日志注解的相關(guān)信息,將注 解配置、參數(shù)信息、SQL模板、Cache緩存等日志注解的相關(guān)信息傳入與主線程異步的支線程 任務池。當Control ler層內(nèi)部涉及業(yè)務層(即Service層)調(diào)用時,在觸發(fā)Service層步驟執(zhí) 行前后,監(jiān)控程序會判斷Service層對應的步驟中是否存在日志注解,若存在,則通過面向 切面的日志注解方式,獲取日志注解的相關(guān)信息,將注解配置、參數(shù)信息、SQL模板、Cache緩 存等日志注解的相關(guān)信息傳入支線程任務池。同理,當Service層涉及數(shù)據(jù)邏輯層(即Dao 層)的調(diào)用時,判斷Dao層對應的步驟中是否存在日志注解,若存在,則通過面向切面的日志 注解方式,獲取日志注解的相關(guān)信息,將注解配置、參數(shù)信息、SQL模板、Cache緩存等日志注 解的相關(guān)信息傳入支線程任務池。例如,在Controller層的步驟執(zhí)行過程中,當存在@ LogBefore注解時,在當前步驟執(zhí)行前插入一條日志。在Service層的步驟執(zhí)行過程中,當存 在OLogThrow注解時,在當前步驟執(zhí)行出現(xiàn)異常時插入一條日志。在Dao層的步驟執(zhí)行過程 中,當存在OLogAround注解時,在當前步驟執(zhí)行前與后各插入一條日志。
      [0063] 本實施例在控制層、業(yè)務層及數(shù)據(jù)邏輯層等各業(yè)務層對應的執(zhí)行步驟中,判斷各 業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,以將日志注解的相關(guān)信息傳送 至支線程任務池,實現(xiàn)了通過面向切面的日志注解方式解耦主業(yè)務與輔業(yè)務執(zhí)行,提高了 業(yè)務服務器執(zhí)行業(yè)務的便捷性。
      [0064] 進一步地,基于上述服務器第一實施例,提出了本發(fā)明服務器第四實施例,第四實 施例與第一實施例的區(qū)別在于,該第四實施例中上述控制模塊30還用于,控制所述支線程 任務池根據(jù)接收到的所述SQL模版,將所述參數(shù)信息封裝為SQL語句格式的數(shù)據(jù)。
      [0065]本實施例中,日志注解的相關(guān)信息包括注解配置、參數(shù)信息、SQL模板、Cache緩存 等信息,預設格式的數(shù)據(jù)包括SQL語句格式的數(shù)據(jù)。業(yè)務服務器在由主線程執(zhí)行主業(yè)務的同 時,控制支線程執(zhí)行輔業(yè)務。具體地,控制模塊30控制支線程任務池接收到注解配置、參數(shù) 信息、SQL模板、Cache緩存等信息后,可根據(jù)接收到的注解配置獲取對應的日志注解,根據(jù) 日志注解執(zhí)行相應的操作。以及根據(jù)接收到的SQL模版,將參數(shù)信息封裝為SQL語句格式的 數(shù)據(jù)。然后將SQL語句格式的數(shù)據(jù)傳入存儲數(shù)據(jù)庫。
      [0066]本實施例由支線程任務池根據(jù)SQL模版將相關(guān)的參數(shù)信息封裝為SQL語句格式的 數(shù)據(jù),使得主線程執(zhí)行主業(yè)務與支線程執(zhí)行輔任務是異步進行的,互不干擾,可很大程度上 減少業(yè)務處理耗時,提升服務器對業(yè)務處理的性能。
      [0067] 對應地,如圖4所示,提出本發(fā)明一種業(yè)務執(zhí)行方法第一實施例。該實施例的業(yè)務 執(zhí)行方法包括:
      [0068] 步驟S10、所述業(yè)務服務器在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務 請求對應的主業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注 解;
      [0069] 本實施例中,業(yè)務執(zhí)行方法應用于服務器,業(yè)務包括主業(yè)務和輔業(yè)務,主業(yè)務為該 業(yè)務的核心業(yè)務,輔業(yè)務為記錄日志等次要的業(yè)務??蛇x地,為了降低主業(yè)務和輔業(yè)務的耦 合性,主業(yè)務由主線程執(zhí)行,輔業(yè)務由支線程執(zhí)行,兩者之間互不干擾。同時,將服務器劃分 為業(yè)務服務器、日志服務器等,且業(yè)務服務器對應設置業(yè)務數(shù)據(jù)庫,用于存儲核心業(yè)務的相 關(guān)數(shù)據(jù);日志服務器對應設置日志數(shù)據(jù)庫,用于存儲記錄日志相關(guān)的數(shù)據(jù)。
      [0070] 具體地,業(yè)務服務器偵測是否接收到客戶端的HTTP請求(即業(yè)務請求),該HTTP請 求是指從客戶端到服務器端的請求消息,包括:消息首行中,對資源的請求方法、資源的標 識符及使用的協(xié)議。當業(yè)務服務器接收到客戶端發(fā)送的業(yè)務請求時,業(yè)務服務器通過預置 的主線程執(zhí)行該業(yè)務請求對應的主業(yè)務,并依次判斷控制層、業(yè)務層及數(shù)據(jù)邏輯層等各業(yè) 務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,形成面向切面的注解方式。
      [0071] 需要說明的是,日志注解包括在當前步驟執(zhí)行前插入一條日志、在當前步驟執(zhí)行 結(jié)束后插入一條日志、在當前步驟執(zhí)行前與執(zhí)行后各插入一條日志、在當前步驟執(zhí)行出現(xiàn) 異常時插入一條日志及在當前步驟需要返回結(jié)果時執(zhí)行結(jié)束后插入一條日志。
      [0072] 每個日志注解對應一個標簽,可根據(jù)業(yè)務的實際需要,設置日志注解的標簽對各 個業(yè)務層的邏輯步驟進行選擇性標記。例如,日志注解的標簽包括OLogBef ore、@ LogAf ter、OLogAround、OLogThrow及OLogReturn,不同的日志注解的標簽表達意義不同,相 同的或不同的日志注解的標簽可疊加使用。其中,
      [0073] OLogBefore表示在當前步驟執(zhí)行前插入一條日志;
      [0074] OLogAf ter表示在當前步驟執(zhí)行結(jié)束后插入一條日志;
      [0075] OLogAround表示在當前步驟執(zhí)行前與后各插入一條日志;
      [0076] OLogThrow表示在當前步驟執(zhí)行出現(xiàn)異常時插入一條日志;
      [0077] OLogRe turn表示若當前步驟需要返回結(jié)果,則執(zhí)行結(jié)束后會插入一條日志。
      [0078] 步驟S20、若存在,則將所述日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與 所述主線程異步的支線程任務池;
      [0079] 在判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解后,若各業(yè)務 層對應的執(zhí)行步驟中不存在執(zhí)行輔業(yè)務的日志注解,則說明業(yè)務服務器不需要通過支線程 執(zhí)行輔業(yè)務,即不需要執(zhí)行后續(xù)的相關(guān)步驟。若各業(yè)務層對應的執(zhí)行步驟中存在執(zhí)行輔業(yè) 務的日志注解,則業(yè)務服務器將日志注解的相關(guān)信息傳送至預置的與主線程異步的支線程 任務池。日志注解的相關(guān)信息包括注解配置、參數(shù)信息、SQL模板、Cache緩存等信息。
      [0080] 步驟S30、在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池對接收到 的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至預置的 存儲數(shù)據(jù)庫中。
      [0081] 業(yè)務服務器將日志注解的相關(guān)信息傳送至支線程任務池后,在主線程執(zhí)行主業(yè) 務,而由支線程執(zhí)行輔業(yè)務,兩者之間是同步進行的,且互不干擾。任務池在接收到注解配 置、參數(shù)信息、SQL模板、Cache緩存等信息后,根據(jù)反射機制對接收到的日志注解的相關(guān)信 息封裝為預設格式的數(shù)據(jù),實現(xiàn)對日志注解對應的日志進行組裝。該預設格式的數(shù)據(jù)可包 括SQL語句格式的數(shù)據(jù),反射機制可定義為動態(tài)提取日志注解的相關(guān)信息進行寫日志。然后 業(yè)務服務器將預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫中,該存儲數(shù)據(jù)庫可為Redis存儲 隊列。從而使得主線程專注于核心業(yè)務處理,無損核心業(yè)務,異步支線程則處理日志數(shù)據(jù), 可很大程度上減少業(yè)務處理耗時,提升服務器對業(yè)務處理性能。需要說明的是,存儲數(shù)據(jù)庫 (即Redis存儲隊列)可設置于業(yè)務服務器內(nèi),也可單獨設置存儲服務器對應該存儲數(shù)據(jù)庫, 用于存儲預設格式的數(shù)據(jù)。
      [0082] 以下進行舉例說明,如圖2所示,服務器包括業(yè)務服務器和日志服務器,業(yè)務服務 器對應設置主業(yè)務數(shù)據(jù)庫,日志服務器對應設置日志存儲數(shù)據(jù)庫,存儲數(shù)據(jù)庫(即Redis存 儲隊列)單獨設置。具體地,當業(yè)務請求抵達業(yè)務服務器時,首先進入的是控制層,由主線程 執(zhí)行相應的步驟,在執(zhí)行步驟的過程中判斷對應的步驟中是否存在日志注解;若存在,則通 過面向切面的日志注解方式,獲取日志注解的相關(guān)信息,將日志注解的相關(guān)信息傳入支線 程任務池。當控制層內(nèi)部涉及業(yè)務層的調(diào)用時,在觸發(fā)執(zhí)行業(yè)務層相關(guān)步驟過程中,判斷業(yè) 務層對應的步驟中是否存在日志注解,若存在,則通過面向切面的日志注解方式,獲取該日 志注解的相關(guān)信息,將日志注解的相關(guān)信息傳入支線程任務池。同理,當業(yè)務層涉及數(shù)據(jù)邏 輯層的調(diào)用時,對日志注解的處理方法與業(yè)務層的相同。主線程執(zhí)行主業(yè)務操作產(chǎn)生的數(shù) 據(jù)將存儲在主業(yè)務數(shù)據(jù)庫中。支線程任務池在接收到日志注解的相關(guān)信息后,根據(jù)反射機 制,根據(jù)相關(guān)信息進行日志SQL語句格式的封裝形成SQL語句格式的數(shù)據(jù),并將SQL語句格式 的數(shù)據(jù)推入存儲數(shù)據(jù)庫中,該支線程任務池相當于類生產(chǎn)者。日志服務器的線程任務池實 時監(jiān)測存儲數(shù)據(jù)庫中是否存在數(shù)據(jù),線程任務池相當于類消費者。當存儲數(shù)據(jù)庫中存在數(shù) 據(jù)時,則線程任務池啟動相應的數(shù)量的分支線程,將存儲數(shù)據(jù)庫中的SQL語句格式的數(shù)據(jù)取 出,執(zhí)行將日志寫入日志存儲數(shù)據(jù)庫的操作。
      [0083] 業(yè)務服務器在主線程執(zhí)行主業(yè)務時對三大業(yè)務層次進行日志注解的監(jiān)控,實現(xiàn)主 業(yè)務與輔業(yè)務執(zhí)行的解耦,日志注解對應日志信息的封裝由支線程任務池處理;封裝好后 的日志信息以生產(chǎn)者模式傳入存儲數(shù)據(jù)庫中。日志記錄服務器以消費者模式不間斷從存儲 數(shù)據(jù)庫中提取流水日志信息,寫入獨立的日志存儲數(shù)據(jù)庫中。從而在使用面向切面注解方 式解耦主業(yè)務與輔業(yè)務執(zhí)行的基礎上,主業(yè)務數(shù)據(jù)庫與日志存儲數(shù)據(jù)庫實現(xiàn)分離,可加快 主業(yè)務的處理速度;且主業(yè)務的執(zhí)行、日志信息的封裝、日志服務器讀寫日志三者是同步執(zhí) 行,實現(xiàn)縮短執(zhí)行業(yè)務的耗時,加速業(yè)務功能的整體執(zhí)行效率。
      [0084] 本發(fā)明實施例業(yè)務服務器通過主線程執(zhí)行業(yè)務請求對應的主業(yè)務,并當各業(yè)務層 對應的執(zhí)行步驟中存在執(zhí)行輔業(yè)務的日志注解時,將該日志注解的相關(guān)信息傳送至支線程 任務池。在主線程執(zhí)行主業(yè)務的同時,控制支線程任務池對日志注解的相關(guān)信息封裝為預 設格式的數(shù)據(jù)存儲至存儲數(shù)據(jù)庫中,以供日志服務器從存儲數(shù)據(jù)庫中獲取數(shù)據(jù)寫入日志數(shù) 據(jù)庫中。從而可以通過將主業(yè)務與輔業(yè)務分別在主線程與支線程上執(zhí)行,并分別設置業(yè)務 服務器與日志服務器及其對應的數(shù)據(jù)庫對相應的數(shù)據(jù)進行存儲。相對于現(xiàn)有技術(shù)中將主業(yè) 務與輔業(yè)務混合在同一線程上執(zhí)行,降低了主業(yè)務與輔業(yè)務之間的耦合性,提高了服務器 執(zhí)行業(yè)務的性能及易擴展性,達到提升用戶體驗的目的。
      [0085] 進一步地,如圖5所示,基于上述業(yè)務執(zhí)行方法第一實施例,提出了本發(fā)明業(yè)務執(zhí) 行方法第二實施例,第二實施例與第一實施例的區(qū)別在于,該第二實施例中上述步驟S30之 后包括:所述日志服務器在偵測到所述存儲數(shù)據(jù)庫中存儲有所述預設格式的數(shù)據(jù)時,啟動 相應的任務線程將所述預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對所述日志注解對應 的日志進行記錄。
      [0086] 本實施例中,上述服務器還包括日志服務器,日志服務器實時偵測存儲數(shù)據(jù)庫(即 Redis存儲隊列)中的數(shù)據(jù)。在上述業(yè)務服務器將預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫 中后,日志服務器在偵測到存儲數(shù)據(jù)庫中存儲有預設格式的數(shù)據(jù)時,啟動相應的數(shù)量的任 務線程將執(zhí)行將該預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對日志注解對應的日志進 行記錄,日志存儲數(shù)據(jù)庫中記錄日志的規(guī)范的一實施例可如上述表1所示,可以理解的是, 上述表1中記錄日志的規(guī)范也可以根據(jù)實際需要進行設置,并不限定本發(fā)明。
      [0087] 需要說明的是,日志服務器的任務線程池中的分支線程數(shù)量是有限的,任務線程 池中任務線程數(shù)量的最大閾值可根據(jù)具體情況而靈活設置,日志服務器只能啟動到最大閾 值的數(shù)量的分支線程。在啟動分支線程的過程中,隨著存儲數(shù)據(jù)庫中數(shù)據(jù)的減少,相應的分 支線程也會被回收。例如,當預設格式的數(shù)據(jù)為SQL語句格式的數(shù)據(jù)時,日志服務器在偵測 到儲數(shù)據(jù)庫中存儲有一個SQL語句格式的數(shù)據(jù)時,啟動一個分支線程將儲數(shù)據(jù)庫中的SQL語 句格式的數(shù)據(jù)取出,將數(shù)據(jù)保存到日志存儲數(shù)據(jù)庫中。
      [0088] 現(xiàn)有服務器執(zhí)行業(yè)務的過程中,由于是將主業(yè)務與輔業(yè)務耦合交錯在一起,以串 行方式執(zhí)行,因此,輔業(yè)務的執(zhí)行所消耗的時間無形中增加了整體業(yè)務的處理時長,損耗了 服務器對應執(zhí)行系統(tǒng)的性能。例如,業(yè)務執(zhí)行完畢需要耗時T0為5秒,其中,主業(yè)務執(zhí)行耗時 T1為3.3秒,輔業(yè)務執(zhí)行耗時T2為1.7秒。
      [0089] 而本實施例中,在使用面向切面注解方式解耦主業(yè)務與輔業(yè)務執(zhí)行的基礎上,主 業(yè)務與輔業(yè)務異步執(zhí)行,實現(xiàn)縮短甚至是消除執(zhí)行輔業(yè)務的耗時,加速業(yè)務功能的整體執(zhí) 行效率。例如,主業(yè)務執(zhí)行耗時T1為3.3秒,輔業(yè)務執(zhí)行耗時T2為1.7秒,兩者之間互不干擾。
      [0090] 本實施例通過日志服務器提取存儲數(shù)據(jù)庫中的數(shù)據(jù),啟動相應的任務線程將該數(shù) 據(jù)寫入日志數(shù)據(jù)庫中,以對日志注解對應的日志進行記錄。降低了主業(yè)務與輔業(yè)務之間的 耦合性,使得主線程專注于執(zhí)行主業(yè)務,支線程則執(zhí)行輔業(yè)務,減少了整體業(yè)務處理的耗 時,提升服務器對業(yè)務處理性能。
      [0091] 進一步地,基于上述業(yè)務執(zhí)行方法第一實施例,提出了本發(fā)明業(yè)務執(zhí)行方法第三 實施例,第三實施例與第一實施例的區(qū)別在于,該第三實施例中上述依次判斷各業(yè)務層對 應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解的步驟包括:先判斷所述控制層對應的執(zhí) 行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,在所述控制層內(nèi)部調(diào)用所述業(yè)務層時,再判斷 所述業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解;然后在所述業(yè)務層內(nèi)部調(diào) 用所述數(shù)據(jù)邏輯層時,判斷所述數(shù)據(jù)邏輯層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志 注解。
      [0092] 本實施例中,各業(yè)務層包括控制層、業(yè)務層及數(shù)據(jù)邏輯層,在業(yè)務服務器判斷各業(yè) 務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解的過程中,當業(yè)務請求達到業(yè)務服 務器時,首先進入控制層(即Controller層),并調(diào)用預置的監(jiān)控程序判斷對應的步驟中是 否有日志注解。若存在,則通過面向切面的日志注解方式,獲取日志注解的相關(guān)信息,將注 解配置、參數(shù)信息、SQL模板、Cache緩存等日志注解的相關(guān)信息傳入與主線程異步的支線程 任務池。當Control ler層內(nèi)部涉及業(yè)務層(即Service層)調(diào)用時,在觸發(fā)Service層步驟執(zhí) 行前后,監(jiān)控程序會判斷Service層對應的步驟中是否存在日志注解,若存在,則通過面向 切面的日志注解方式,獲取日志注解的相關(guān)信息,將注解配置、參數(shù)信息、SQL模板、Cache緩 存等日志注解的相關(guān)信息傳入支線程任務池。同理,當Service層涉及數(shù)據(jù)邏輯層(即Dao 層)的調(diào)用時,判斷Dao層對應的步驟中是否存在日志注解,若存在,則通過面向切面的日志 注解方式,獲取日志注解的相關(guān)信息,將注解配置、參數(shù)信息、SQL模板、Cache緩存等日志注 解的相關(guān)信息傳入支線程任務池。例如,在Controller層的步驟執(zhí)行過程中,當存在@ LogBefore注解時,在當前步驟執(zhí)行前插入一條日志。在Service層的步驟執(zhí)行過程中,當存 在OLogThrow注解時,在當前步驟執(zhí)行出現(xiàn)異常時插入一條日志。在Dao層的步驟執(zhí)行過程 中,當存在OLogAround注解時,在當前步驟執(zhí)行前與后各插入一條日志。
      [0093] 本實施例在控制層、業(yè)務層及數(shù)據(jù)邏輯層等各業(yè)務層對應的執(zhí)行步驟中,判斷各 業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,以將日志注解的相關(guān)信息傳送 至支線程任務池,實現(xiàn)了通過面向切面的日志注解方式解耦主業(yè)務與輔業(yè)務執(zhí)行,提高了 業(yè)務服務器執(zhí)行業(yè)務的便捷性。
      [0094] 進一步地,基于上述業(yè)務執(zhí)行方法第一實施例,提出了本發(fā)明業(yè)務執(zhí)行方法第四 實施例,第四實施例與第一實施例的區(qū)別在于,該實施例中上述控制所述支線程任務池對 接收到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù)的步驟包括:控制所述支線程任 務池根據(jù)接收到的所述SQL模版,將所述參數(shù)信息封裝為SQL語句格式的數(shù)據(jù)。
      [0095]本實施例中,日志注解的相關(guān)信息包括注解配置、參數(shù)信息、SQL模板、Cache緩存 等信息,預設格式的數(shù)據(jù)包括SQL語句格式的數(shù)據(jù)。業(yè)務服務器在由主線程執(zhí)行主業(yè)務的同 時,控制支線程執(zhí)行輔業(yè)務。具體地,支線程任務池接收到注解配置、參數(shù)信息、SQL模板、 Cache緩存等信息后,可根據(jù)接收到的注解配置獲取對應的日志注解,根據(jù)日志注解執(zhí)行相 應的操作。以及根據(jù)接收到的SQL模版,將參數(shù)信息封裝為SQL語句格式的數(shù)據(jù)。然后將SQL 語句格式的數(shù)據(jù)傳入存儲數(shù)據(jù)庫。
      [0096]本實施例由支線程任務池根據(jù)SQL模版將相關(guān)的參數(shù)信息封裝為SQL語句格式的 數(shù)據(jù),使得主線程執(zhí)行主業(yè)務與支線程執(zhí)行輔任務是異步進行的,互不干擾,可很大程度上 減少業(yè)務處理耗時,提升服務器對業(yè)務處理的性能。
      [0097] 通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實施例方 法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下 前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做 出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì) (如R0M/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,月艮 務器,空調(diào)器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
      [0098] 以上僅為本發(fā)明的可選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā) 明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技 術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。
      【主權(quán)項】
      1. 一種服務器,其特征在于,所述服務器包括業(yè)務服務器,所述業(yè)務服務器包括: 判斷模塊,用于在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務請求對應的主 業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解; 傳送模塊,用于若各業(yè)務層對應的執(zhí)行步驟中存在執(zhí)行輔業(yè)務的日志注解,則將所述 日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與所述主線程異步的支線程任務池; 控制模塊,用于在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池對接收 到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至預置 的存儲數(shù)據(jù)庫中。2. 如權(quán)利要求1所述的服務器,其特征在于,所述服務器還包括日志服務器,所述日志 服務器包括: 記錄模塊,用于在偵測到所述存儲數(shù)據(jù)庫中存儲有所述預設格式的數(shù)據(jù)時,啟動相應 的任務線程將所述預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對所述日志注解對應的日 志進行記錄。3. 如權(quán)利要求1所述的服務器,其特征在于,所述各業(yè)務層包括控制層、業(yè)務層及數(shù)據(jù) 邏輯層,所述判斷模塊還用于,先判斷所述控制層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務 的日志注解,在所述控制層內(nèi)部調(diào)用所述業(yè)務層時,再判斷所述業(yè)務層對應的執(zhí)行步驟中 是否存在執(zhí)行輔業(yè)務的日志注解;然后在所述業(yè)務層內(nèi)部調(diào)用所述數(shù)據(jù)邏輯層時,判斷所 述數(shù)據(jù)邏輯層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解。4. 如權(quán)利要求1所述的服務器,其特征在于,所述相關(guān)信息包括參數(shù)信息及結(jié)構(gòu)化查詢 語言模版,所述預設格式包括結(jié)構(gòu)化查詢語言語句格式,所述控制模塊還用于,控制所述支 線程任務池根據(jù)接收到的所述結(jié)構(gòu)化查詢語言模版,將所述參數(shù)信息封裝為結(jié)構(gòu)化查詢語 言語句格式的數(shù)據(jù)。5. 如權(quán)利要求1-4任一項所述的服務器,其特征在于,所述日志注解包括在當前步驟執(zhí) 行前插入一條日志、在當前步驟執(zhí)行結(jié)束后插入一條日志、在當前步驟執(zhí)行前與執(zhí)行后各 插入一條日志、在當前步驟執(zhí)行出現(xiàn)異常時插入一條日志及在當前步驟需要返回結(jié)果時執(zhí) 行結(jié)束后插入一條日志。6. -種業(yè)務執(zhí)行方法,其特征在于,所述業(yè)務執(zhí)行方法應用于服務器,所述服務器包括 業(yè)務服務器,所述業(yè)務包括主業(yè)務和輔業(yè)務,所述業(yè)務執(zhí)行方法包括以下步驟: 所述業(yè)務服務器在接收到業(yè)務請求時,通過預置的主線程執(zhí)行所述業(yè)務請求對應的主 業(yè)務,依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解; 若存在,則將所述日志注解的相關(guān)信息傳送至所述業(yè)務服務器預置的與所述主線程異 步的支線程任務池; 在所述主線程執(zhí)行所述主業(yè)務的同時,控制所述支線程任務池對接收到的所述日志注 解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將所述預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫 中。7. 如權(quán)利要求6所述的業(yè)務執(zhí)行方法,其特征在于,所述服務器還包括日志服務器,所 述控制所述支線程任務池對接收到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù),將 所述預設格式的數(shù)據(jù)存儲至預置的存儲數(shù)據(jù)庫中之后包括: 所述日志服務器在偵測到所述存儲數(shù)據(jù)庫中存儲有所述預設格式的數(shù)據(jù)時,啟動相應 的任務線程將所述預設格式的數(shù)據(jù)寫入預置的日志數(shù)據(jù)庫中,以對所述日志注解對應的日 志進行記錄。8. 如權(quán)利要求6所述的業(yè)務執(zhí)行方法,其特征在于,所述各業(yè)務層包括控制層、業(yè)務層 及數(shù)據(jù)邏輯層,所述依次判斷各業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解 包括: 先判斷所述控制層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志注解,在所述控制層 內(nèi)部調(diào)用所述業(yè)務層時,再判斷所述業(yè)務層對應的執(zhí)行步驟中是否存在執(zhí)行輔業(yè)務的日志 注解;然后在所述業(yè)務層內(nèi)部調(diào)用所述數(shù)據(jù)邏輯層時,判斷所述數(shù)據(jù)邏輯層對應的執(zhí)行步 驟中是否存在執(zhí)行輔業(yè)務的日志注解。9. 如權(quán)利要求6所述的業(yè)務執(zhí)行方法,其特征在于,所述相關(guān)信息包括參數(shù)信息及結(jié)構(gòu) 化查詢語言模版,所述預設格式包括結(jié)構(gòu)化查詢語言語句格式,所述控制所述支線程任務 池對接收到的所述日志注解的相關(guān)信息封裝為預設格式的數(shù)據(jù)包括: 控制所述支線程任務池根據(jù)接收到的所述結(jié)構(gòu)化查詢語言模版,將所述參數(shù)信息封裝 為結(jié)構(gòu)化查詢語言語句格式的數(shù)據(jù)。10. 如權(quán)利要求6-9任一項所述的業(yè)務執(zhí)行方法,其特征在于,所述日志注解包括在當 前步驟執(zhí)行前插入一條日志、在當前步驟執(zhí)行結(jié)束后插入一條日志、在當前步驟執(zhí)行前與 執(zhí)行后各插入一條日志、在當前步驟執(zhí)行出現(xiàn)異常時插入一條日志及在當前步驟需要返回 結(jié)果時執(zhí)行結(jié)束后插入一條日志。
      【文檔編號】G06F11/34GK105912455SQ201610272164
      【公開日】2016年8月31日
      【申請日】2016年4月27日
      【發(fā)明人】鄒煒
      【申請人】努比亞技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1