java - Spring Boot - 如何跟踪所有请求和响应异常并保存到数据库中?
问题描述
我有两个微服务(Spring Boot)用于两个产品之间的集成。我的架构如下所示。
产品 1 <-------> 微服务 1/微服务 2 <-------> 产品 1。
我的任务是我需要使用输入婴儿车(使用方法,例如 GET、POST 等)、请求路径、查询字符串、此请求的相应类方法、此操作的响应(成功和错误)跟踪请求并保存到数据库表。我试过弹簧靴执行器。但没有运气。请建议如何实现这一目标。
解决方案
我建议使用一个HandlerInterceptor
可以注册到两个微服务 REST 控制器的。它有一个很好的生命周期回调,您可以使用它来序列化数据并将其保存到数据库中。这是自定义拦截器类:
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class DBRequestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// DB logic
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
// DB logic
super.afterCompletion(request, response, handler, ex);
}
}
一旦你开发了这个可重用的处理程序,你就可以在 web 配置器中注册。这是代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Autowired
private DBRequestInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("/**/");
}
}
此代码在您的所有 URL 映射上注册拦截器。您可以将其自定义为某些特定的服务 URL。
在上述拦截器中读取请求流后,您可能会在原始代码中发现异常。在这种情况下,您可以利用 Spring 包装类ContentCachingRequestWrapper
希望有帮助。
推荐阅读
- flutter - 使用 GooglePlacesAutocompleteWidget 时强制 flutter_google_places 仅显示城市
- python - Pyplot 显示没有 plt.show() 的图像
- mysql - pentaho 数据集成 - 无法连接到 mysql
- qt - 将 QAbstarctListModel 拆分为子模型
- python - 将 xml 列表转换为 DataFrame
- assembly - la 和 addi 在 MIPS asm 中复制寄存器的区别
- json - 如何在 Swift 中解析多级 json 结构?
- java - Imageview 卡在 android 布局的顶部
- python - 在 SQL 中迭代
- java - 从嵌套 JSON 到平面 JSON 的 JAVA JSON 动态转换