Commit 4cc45d73fb828fa29da54baabf309f3eff6b2947

Authored by dark
1 parent 3018866c

将 bizType 和 bizId 进行封装,实现 SkyWalking Tag 检索

src/main/java/cn/iocoder/dashboard/common/annotation/BizTracing.java 0 → 100644
  1 +package cn.iocoder.dashboard.common.annotation;
  2 +
  3 +import java.lang.annotation.*;
  4 +
  5 +@Target({ElementType.METHOD})
  6 +@Retention(RetentionPolicy.RUNTIME)
  7 +@Inherited
  8 +
  9 +/**
  10 + * 打印业务流水号/业务类型注解
  11 + *
  12 + * @author 麻薯
  13 + */
  14 +public @interface BizTracing {
  15 + String BIZ_ID = "bizId";
  16 + String BIZ_TYPE = "bizType";
  17 +
  18 + String bizId() default "NULL_ID";
  19 +
  20 + String bizType() default "NULL_TYPE";
  21 +
  22 +}
... ...
src/main/java/cn/iocoder/dashboard/common/annotation/BizTracingAop.java 0 → 100644
  1 +package cn.iocoder.dashboard.common.annotation;
  2 +
  3 +import cn.iocoder.dashboard.util.sping.SpElUtil;
  4 +import lombok.extern.slf4j.Slf4j;
  5 +import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
  6 +import org.aspectj.lang.ProceedingJoinPoint;
  7 +import org.aspectj.lang.annotation.Around;
  8 +import org.aspectj.lang.annotation.Aspect;
  9 +import org.aspectj.lang.annotation.Before;
  10 +import org.aspectj.lang.annotation.Pointcut;
  11 +import org.springframework.context.annotation.Configuration;
  12 +import org.springframework.web.bind.annotation.ResponseBody;
  13 +
  14 +@Aspect
  15 +@Slf4j
  16 +@Configuration
  17 +public class BizTracingAop {
  18 +
  19 + @Around(value = "@annotation(bizTracing)")
  20 + public void tagBizInfo( ProceedingJoinPoint joinPoint, BizTracing bizTracing) {
  21 + String bizId = SpElUtil.analysisSpEl(bizTracing.bizId(), joinPoint);
  22 + String bizType = SpElUtil.analysisSpEl(bizTracing.bizType(), joinPoint);
  23 + log.info("accept biz: bizId[{}], bizType[{}].", bizId, bizType);
  24 + ActiveSpan.tag(BizTracing.BIZ_ID, bizId);
  25 + ActiveSpan.tag(BizTracing.BIZ_TYPE, bizType);
  26 + }
  27 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/tracer/core/util/TracerUtils.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.dashboard.framework.tracer.core.util;
2 2  
3 3 import cn.hutool.core.util.StrUtil;
4 4 import cn.iocoder.dashboard.framework.tracer.core.ITrace;
5   -import cn.iocoder.dashboard.util.bean.SpringUtil;
  5 +import cn.iocoder.dashboard.util.sping.SpringBeanUtil;
6 6 import org.apache.skywalking.apm.toolkit.trace.TraceContext;
7 7  
8 8 import java.util.UUID;
... ... @@ -61,7 +61,7 @@ public class TracerUtils {
61 61 * @return ITrace
62 62 */
63 63 private static ITrace getTracer() {
64   - return SpringUtil.getBean(ITrace.class);
  64 + return SpringBeanUtil.getBean(ITrace.class);
65 65 }
66 66  
67 67 /**
... ...
src/main/java/cn/iocoder/dashboard/util/sping/SpElUtil.java 0 → 100644
  1 +package cn.iocoder.dashboard.util.sping;
  2 +
  3 +import org.aspectj.lang.ProceedingJoinPoint;
  4 +import org.aspectj.lang.reflect.MethodSignature;
  5 +import org.springframework.core.DefaultParameterNameDiscoverer;
  6 +import org.springframework.expression.EvaluationContext;
  7 +import org.springframework.expression.Expression;
  8 +import org.springframework.expression.spel.standard.SpelExpressionParser;
  9 +import org.springframework.expression.spel.support.StandardEvaluationContext;
  10 +
  11 +import java.lang.reflect.Method;
  12 +
  13 +public class SpElUtil {
  14 +
  15 + private SpElUtil() {
  16 + }
  17 +
  18 + public static String analysisSpEl(String spElString, ProceedingJoinPoint joinPoint) {
  19 + SpelExpressionParser parser = new SpelExpressionParser();
  20 + DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
  21 + // 通过joinPoint获取被注解方法
  22 + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
  23 + Method method = methodSignature.getMethod();
  24 + // 使用spring的DefaultParameterNameDiscoverer获取方法形参名数组
  25 + String[] paramNames = nameDiscoverer.getParameterNames(method);
  26 + // 解析过后的Spring表达式对象
  27 + Expression expression = parser.parseExpression(spElString);
  28 + // spring的表达式上下文对象
  29 + EvaluationContext context = new StandardEvaluationContext();
  30 + // 通过joinPoint获取被注解方法的形参
  31 + Object[] args = joinPoint.getArgs();
  32 + // 给上下文赋值
  33 + for (int i = 0; i < args.length; i++) {
  34 + context.setVariable(paramNames[i], args[i]);
  35 + }
  36 + Object value = expression.getValue(context);
  37 + return value == null ? "null" : value.toString();
  38 +
  39 + }
  40 +}
... ...
src/main/java/cn/iocoder/dashboard/util/bean/SpringUtil.java renamed to src/main/java/cn/iocoder/dashboard/util/sping/SpringBeanUtil.java
1   -package cn.iocoder.dashboard.util.bean;
  1 +package cn.iocoder.dashboard.util.sping;
2 2  
3 3 import org.springframework.beans.BeansException;
4 4  
... ... @@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
12 12  
13 13  
14 14 @Component
15   -public class SpringUtil implements ApplicationContextAware {
  15 +public class SpringBeanUtil implements ApplicationContextAware {
16 16  
17 17 /**
18 18 * Spring context
... ...