From 44d73ab3607dac2e66c61e64b08ecb71045ff9db Mon Sep 17 00:00:00 2001 From: zengxiaobo Date: Mon, 15 Jul 2024 17:34:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0traceId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因 增加traceId 修改 增加traceId --- .../cn/axzo/foundation/util/TraceUtils.java | 2 +- .../support/config/DefaultWebMvcConfig.java | 2 ++ .../interceptors/TraceInterceptor.java | 33 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java diff --git a/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java b/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java index 3a68d6a..f48c07c 100644 --- a/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java +++ b/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java @@ -6,7 +6,7 @@ import org.slf4j.MDC; @UtilityClass public class TraceUtils { - public static final String TRACE_ID = "axzo-trace-id"; + public static final String TRACE_ID = "traceId"; /** * 多设置一个key = TraceId, value为traceId的变量到MDC. 以兼容目前的logback-spring.xml的配置 */ diff --git a/web-support-lib/src/main/java/cn/axzo/foundation/web/support/config/DefaultWebMvcConfig.java b/web-support-lib/src/main/java/cn/axzo/foundation/web/support/config/DefaultWebMvcConfig.java index 6f7bd94..34cee7b 100644 --- a/web-support-lib/src/main/java/cn/axzo/foundation/web/support/config/DefaultWebMvcConfig.java +++ b/web-support-lib/src/main/java/cn/axzo/foundation/web/support/config/DefaultWebMvcConfig.java @@ -7,6 +7,7 @@ import cn.axzo.foundation.web.support.exception.AbstractExceptionHandler; import cn.axzo.foundation.web.support.interceptors.CallerAppInterceptor; import cn.axzo.foundation.web.support.interceptors.PrettyPrintInterceptor; import cn.axzo.foundation.web.support.interceptors.PrintVerboseInterceptor; +import cn.axzo.foundation.web.support.interceptors.TraceInterceptor; import cn.axzo.foundation.web.support.resolvers.AxContextResolver; import cn.axzo.foundation.web.support.resolvers.CallerAppResolver; import com.alibaba.fastjson.JSONArray; @@ -187,6 +188,7 @@ public class DefaultWebMvcConfig extends DelegatingWebMvcConfiguration implement registry.addInterceptor(new CorsInterceptor(corsProcessorType)); registry.addInterceptor(new PrettyPrintInterceptor()); registry.addInterceptor(new CallerAppInterceptor(appRuntime)); + registry.addInterceptor(new TraceInterceptor()); super.addInterceptors(registry); diff --git a/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java b/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java new file mode 100644 index 0000000..ce9142e --- /dev/null +++ b/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java @@ -0,0 +1,33 @@ +package cn.axzo.foundation.web.support.interceptors; + +import cn.axzo.foundation.util.TraceUtils; +import com.google.common.base.Strings; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 在request上下文中添加 traceId + */ +public class TraceInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String upstreamTraceId = request.getHeader(TraceUtils.TRACE_ID); + if (!Strings.isNullOrEmpty(upstreamTraceId)) { + // 优先使用上游的 traceId + TraceUtils.putTraceId(upstreamTraceId); + } + + String traceId = TraceUtils.getOrCreateTraceId(); + request.setAttribute(TraceUtils.TRACE_ID_IN_MDC, traceId); + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + TraceUtils.removeTraceId(); + } +} +