日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

記錄業務系統操作日志方案實踐

來源: 責編: 時間:2024-01-04 09:33:27 330觀看
導讀1. 背景在日常業務需求開發中,經常有對關鍵業務功能做操作日志記錄,即某用戶在某一時間操作某功能,操作前后的數據記錄。尤其是在按業務功能模塊拆分成多個project時,就會面臨記錄操作日志與業務邏輯之間解耦、記錄操作日

1. 背景

gFr28資訊網——每日最新資訊28at.com

在日常業務需求開發中,經常有對關鍵業務功能做操作日志記錄,即某用戶在某一時間操作某功能,操作前后的數據記錄。尤其是在按業務功能模塊拆分成多個project時,就會面臨記錄操作日志與業務邏輯之間解耦、記錄操作日志更加簡單、操作前后業務數據(字段)對比等問題。gFr28資訊網——每日最新資訊28at.com

接下來我們將介紹一種易于理解、簡單接入操作日志的方法,同時提供一個通用的接口,方便前端開發者進行頁面展示。gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

2. 預期目標

gFr28資訊網——每日最新資訊28at.com

設計并實現一種通用的數據變更追蹤和動態展示(對象描述)實踐方案,該解決方案允許開發人員通過簡單的注解來標記需要追蹤的業務數據。該系統能夠自動捕獲所有標記數據的添加、修改等操作,并詳細記錄數據變更的每一步。同時,提供的動態展示接口,可以清晰、直觀地展示數據的變更明細,讓數據的前后差異一目了然。具體包括:gFr28資訊網——每日最新資訊28at.com

  • 提供通用數據結構的接口,無需給前端額外定義接口字段描述。
  • 低成本、快速記錄數據Model的每一個字段變更前后的值。

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

3. 技術選型與對比

gFr28資訊網——每日最新資訊28at.com

3.1業務代碼嵌套

在應用層面,可以在業務代碼中添加日志,記錄下關鍵操作和數據的變更以及字段描述。例如,可以在每個數據庫操作前后添加日志,記錄下操作名稱、時間、影響的數據等信息。這種方案需要改變業務代碼(散彈式),增加編碼的復雜性,麻煩且不夠通用。gFr28資訊網——每日最新資訊28at.com

3.2Canal

Canal 是阿里巴巴開源的一款基于 MySQL 二進制日志(binlog)的增量數據訂閱和消費組件。其主要功能是提供對 MySQL 數據庫變更的實時監聽,包括表結構或數據變動等。Canal 記錄數據變更時,它捕獲的是數據庫層面上的原始變更事件,即 insert、update 和 delete 操作。這些事件是基于單個數據庫事務的,Canal 本身并不處理關聯數據的變更。當一個業務模型關聯了多個表的數據時,訂閱 binlog,需要根據業務的實際情況對獲取的 binlog 數據進行正確組裝和解析,包括正確的將多個表的變更合并到一個業務對象中。gFr28資訊網——每日最新資訊28at.com

這種方案的優點是和業務邏輯完全解耦。缺點也很明顯,缺點是只能對數據庫的更改做記錄。gFr28資訊網——每日最新資訊28at.com

3.3觸發器

觸發器會增加數據庫的復雜性和維護成本,如果處理不當,觸發器可能導致性能問題,不考慮。gFr28資訊網——每日最新資訊28at.com

3.4AOP

面向切面編程(Aspect-Oriented Programming,AOP)是一種編程范式,主要用于將那些與業務邏輯無關,但在多個地方都需要使用的公共操作(如日志記錄、安全檢查、事務處理等)分離出來,降低系統的耦合度。AOP的運行需要動態生成代理類和織入切面,本實現方案一部分基于AOP實現。gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

4. 系統設計與實現

gFr28資訊網——每日最新資訊28at.com

本實現方案基于Annotation+AOP+SpringEL+Swagger實現,AOP用于攔截配置自定義注解的Controller方法執行前后記錄操作前后的數據。鑒于多數業務系統中,每一個業務模塊都有根據ID查詢明細數據,由此在記錄數據時回調此業務的getById方法獲取明細數據。SpringEL默認為調用業務模塊的Service的getById方法,如果是uuid等其他條件獲取數據時可以自定義配置。Swagger用于獲取模型定義,在引入此類庫的項目啟動時,會掃描帶有@ApiModel注解的模型并緩存,當模型發生變更時,找到相對應的模型定義一同存儲。為這種不確定的實體字段存儲,本方案采用MongoDB作為數據庫。gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

4.1定義Filter(TrackingAccessFilter)

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:初始化請求Context,并解析request相關信息。gFr28資訊網——每日最新資訊28at.com

4.2定義注解(@TrackingPoint)

定義操作類型與注解,操作類型為便于搜索,注解用于標記需要追蹤變更的 Controller 方法。gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:gFr28資訊網——每日最新資訊28at.com

  • TrackingType 操作類型。
  • moduleAlias 接口對應的模塊名稱,moduleClass接口對應的模塊名稱枚舉類,如配置modelClass時,moduleAlias必為枚舉類中的字段。主要為了方便模塊名稱的管理。
  • title,標題,此次操作類型的簡單描述,通常為接口功能描述。
  • login,接口是否是登錄后訪問,如登錄后訪問,會回調AccessUserService獲取當前用戶信息。
  • id,業務模型ID,也可以是UUID獲其他。
  • tracker:業務模塊的對應Service的Bean,結合id最終拼接成SpringEL表達式,如Expression描述。
  • preEvent:即在controller執行前執行的表達式,如為空時則默認使用Expression定義。當默認表達式不滿足需求時可自定義。
  • postEvent:與preEvent相同,只是在controller執行后執行。

4.3定義Tracker,業務模型回調接口

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:業務模塊Service實現此接口,這樣就能獲取到業務實體Model。通過Spring EL表達式調用業務基礎 Service 的 getById或listByIds等方法,分別獲取方法執行前后的數據快照。將兩次數據快照進行對比,然后獲取相對應的Model描述,并生成詳細的變更記錄存儲到MongoDB中。為不污染原業務Service代碼,建議適配Tracker接口并注入原Service來實現getById、listByIds方法。雖增加了實現類,但對于 項目中一個模塊的業務確是一勞永逸。gFr28資訊網——每日最新資訊28at.com

4.4定義AccessUserService用戶信息回調接口

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:當注解中login為true時,回調此接口,獲取當前登錄用戶信息,如為false時,回調getAnonymousUser()方法。gFr28資訊網——每日最新資訊28at.com

4.5定義TrackingPointAspect攔截請求

圖片圖片gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:gFr28資訊網——每日最新資訊28at.com

  • 此切面用于在帶有自定義注解的 Controller 方法執行前后進行攔截。主要功能解析注解內容生成SpringEL并執行,獲取數據模型。
  • before同步執行。當為修改操作時,為避免出現數據不一致,所以同步查詢數據修改前的快照。
  • afterReturing方法中,當業務執行完成后,發送事件,異步執行以提高效率。

4.6日志存儲

圖片圖片gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:因預期目標想做到通用,業務字段的變更不確定,故而采用NoSQL數據庫存儲,本實現方案內置以MongoDB為默認存儲數據庫,僅對埋點的接口追蹤日志存儲,業務方可自定義日志處理器。如業務方自定義實現存儲,實現AccessLogPersist接口并且配置為Bean即可,默認存儲即失效。gFr28資訊網——每日最新資訊28at.com

4.7定義通用接口規則

為兼容不同業務Model不同的字段定義,接口返回變更前后的數據同時,將字段描述同時返回,以用戶修改為例定義接口如下:gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:gFr28資訊網——每日最新資訊28at.com

  • oldObject:變更前數據節點。
  • newObject:變更后數據節點。
  • objectDescription:數據字段自釋義節點,key為對象節點key,value值即是字段的含義。
  • user: 修改人的信息。
  • 如節點為object對象節點,同級節點下會自動添加 *Description后綴關鍵詞,說明該對象描述,支持多級。
  • 通用數據展示某一條修改日志明細
  • 日志接口數據中含有數據節點的字段描述,以實現一個數據變更明細的動態展示,后文加以示例。
  • module:模塊
  • title:標題
  • type:操作類型

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

5. 實戰案例

gFr28資訊網——每日最新資訊28at.com

5.1以修改用戶信息請求為例,執行時序圖

圖片圖片gFr28資訊網——每日最新資訊28at.com

本節將以一個簡單的用戶(User)和任務(Task)的修改操作為例,介紹如何使用本方案實現數據變更追蹤和動態展示功能。gFr28資訊網——每日最新資訊28at.com

5.2引入pom

圖片圖片gFr28資訊網——每日最新資訊28at.com

5.3實現用戶信息回調接口

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:項目中實現權限,當為登錄接口時,自動回調此方法將LoginUser設置到AccessLog.user對象中。gFr28資訊網——每日最新資訊28at.com

5.4業務接口回調實現

圖片圖片gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

說明:任務模塊Service同理gFr28資訊網——每日最新資訊28at.com

5.5業務接口埋點

圖片圖片gFr28資訊網——每日最新資訊28at.com

5.6修改請求

分別修改User和Task id為1的User和Task,分別提交修改數據如下:gFr28資訊網——每日最新資訊28at.com

{  "age": 32,  "id": 1,  "username": "姜強"}{  "contractName": "jturbo",  "id": 1,  "name": "任務名稱2"}

說明:returncode為0說明業務接口返回成功。gFr28資訊網——每日最新資訊28at.com

5.7通用展示

由上面兩條日志,根據接口規則定義,前端查看變更明細時展示如下:gFr28資訊網——每日最新資訊28at.com

用戶模塊時:gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

任務模塊時:gFr28資訊網——每日最新資訊28at.com

圖片圖片gFr28資訊網——每日最新資訊28at.com

前端可忽略業務,根據接口規則動態渲染,也可使用JSONDiff,高亮差異。gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

6. 總結與展望

gFr28資訊網——每日最新資訊28at.com

通過以上實踐,我們可以實現對業務系統中數據變更的追蹤和記錄,通過通用的接口規則,可以動態地展示不同業務數據模型變更過程。這種方案的核心是將數據變更的追蹤和記錄與業務邏輯分離,使其成為一個通用的、可復用的服務。通過注解和 AOP技術,我們可以輕松地在業務系統中引入這種服務,而無需修改原有的業務代碼。不僅可以提高代碼的可維護性,而且記錄用戶的操作日志也更加優雅。gFr28資訊網——每日最新資訊28at.com

雖然當前已經能夠滿足大部分需求,但在未來,還計劃增加功能:gFr28資訊網——每日最新資訊28at.com

在業務場景允許的情況下增加一鍵回退功能。gFr28資訊網——每日最新資訊28at.com

對于此方案大家有更好的建議,歡迎留言討論。gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com

作者簡介gFr28資訊網——每日最新資訊28at.com

姜強強姜強強gFr28資訊網——每日最新資訊28at.com

gFr28資訊網——每日最新資訊28at.com


gFr28資訊網——每日最新資訊28at.com

經銷商技術部-商業資源團隊gFr28資訊網——每日最新資訊28at.com

016年加入汽車之家,目前主要負責經銷商事業部內創新商業項目的研發工作,熱衷于業內新技術的探索與實踐。gFr28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-57400-0.html記錄業務系統操作日志方案實踐

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Elasticsearch 8.X 小技巧:使用存儲腳本優化數據索引與轉換過程

下一篇: Go語言常見錯誤—意外的變量隱藏

標簽:
  • 熱門焦點
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 品牌洞察丨服務本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現“美團直播”的固定入口。在直播聚合頁面,外賣“神槍手”直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的“征求意見版”:1、取消P序列
  • 滴滴違法違規被罰80.26億 共存在16項違法事實

    滴滴違法違規被罰80.26億 存在16項違法事實開始于2121年7月,歷經一年時間,網絡安全審查辦公室對“滴滴出行”網絡安全審查終于有了一個暫時的結束。據“網信
  • 2021中國國際消費電子博覽會與青島國際軟件融合創新博覽會新聞發布會隆重舉行

    9月18日,2021中國國際消費電子博覽會與青島國際軟件融合創新博覽會新聞發布會在青島國際新聞中心隆重舉行。發布會上青島市政府領導聯袂出席,對本次雙展會情
Top 主站蜘蛛池模板: 济宁市| 教育| 刚察县| 贞丰县| 马山县| 景洪市| 芦山县| 横山县| 拉孜县| 长葛市| 龙井市| 庄河市| 红原县| 常山县| 达尔| 敦煌市| 洞头县| 鹰潭市| 博兴县| 勐海县| 凤山县| 普陀区| 云龙县| 岳池县| 桂平市| 南溪县| 汕头市| 义乌市| 蕉岭县| 财经| 柳河县| 济阳县| 平和县| 讷河市| 绥德县| 禹城市| 边坝县| 柯坪县| 鹤峰县| 工布江达县| 平昌县|