从处理程序拦截器进行数据库调用是明智的吗?



我希望在数据库上存储(post/put)请求和几个特定端点的响应。

是明智的这样做与拦截器(handlerinterceptor) ?我可以自动将调用数据库的服务连接到拦截器吗?我的意思是,还有其他拦截器负责认证/日志记录。如果有意义的话,我打算把它作为最后一个拦截器。

从良好的OOP代码库的角度来看,这样做很有意义,甚至是一个很好的实践,因为它促进了SRP,它有一个服务类,专注于做日志记录的东西,而不是如何从环境中获取需要记录的东西。

日志服务应该被设计成尽可能通用的,这样它就不知道它的环境,如HttpServletRequestHttpServletResponse,以便在其他上下文中容易地被重用(例如,用于记录从代理消费的消息)

HandlerInterceptor为调用日志服务的客户端。在这里你可以访问环境的东西,在你的例子中是HttpServletRequestHttpServletResponse。它的职责是确定当前的HTTP请求是否需要被记录,并准备需要从HTTP请求中记录的内容,并将其传递给日志服务以进行实际的日志记录。

从性能的角度来看,您可以研究异步日志记录的概念(例如,参考这里的log4j2案例)。你仍然从HandlerInterceptor开始,但不直接在同一个线程中调用日志服务,而是告诉其他线程异步执行。