簡體   English   中英

從處理程序攔截器進行數據庫調用是否明智?

[英]Is it wise to make database calls from handler interceptors?

我希望在數據庫上存儲一些特定端點的(發布/放置)請求和響應。

使用攔截器 (handlerInceptor) 這樣做是否明智? 我可以將調用數據庫的服務自動裝配到攔截器嗎? 我的意思是還有其他攔截器負責身份驗證/日志記錄。 如果有意義的話,我打算將其添加為最后一個攔截器。

從良好的 OOP 代碼庫的角度來看,這樣做很有意義,甚至是一種很好的做法,因為它促進了SRP ,它有一個服務類只專注於做日志記錄,而不是如何獲得需要的東西。從環境中記錄。

日志服務應設計為盡可能通用,以便它對其環境(例如HttpServletRequestHttpServletResponse一無所知,以便在其他上下文中輕松重用它(例如,用於記錄從代理消耗的消息)

HandlerInterceptor是調用日志服務的客戶端。 在那里您可以訪問環境內容,在您的情況下是HttpServletRequestHttpServletResponse 它的職責是確定當前的 HTTP 請求是否需要被記錄,並從 HTTP 請求中准備需要記錄的東西,並將其傳遞給日志服務以進行實際的日志記錄。

對於性能的觀點,您可以研究異步日志記錄的概念(例如,請參考此處的 log4j2 案例)。 您仍然從HandlerInterceptor開始,但不要在同一線程中直接調用日志記錄服務,而是告訴其他線程異步執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM