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

This commit is contained in:
dark 2021-03-06 22:29:11 +08:00
parent 3018866c62
commit 4cc45d73fb
5 changed files with 93 additions and 4 deletions

View File

@ -0,0 +1,22 @@
package cn.iocoder.dashboard.common.annotation;
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
/**
* 打印业务流水号/业务类型注解
*
* @author 麻薯
*/
public @interface BizTracing {
String BIZ_ID = "bizId";
String BIZ_TYPE = "bizType";
String bizId() default "NULL_ID";
String bizType() default "NULL_TYPE";
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.dashboard.common.annotation;
import cn.iocoder.dashboard.util.sping.SpElUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ResponseBody;
@Aspect
@Slf4j
@Configuration
public class BizTracingAop {
@Around(value = "@annotation(bizTracing)")
public void tagBizInfo( ProceedingJoinPoint joinPoint, BizTracing bizTracing) {
String bizId = SpElUtil.analysisSpEl(bizTracing.bizId(), joinPoint);
String bizType = SpElUtil.analysisSpEl(bizTracing.bizType(), joinPoint);
log.info("accept biz: bizId[{}], bizType[{}].", bizId, bizType);
ActiveSpan.tag(BizTracing.BIZ_ID, bizId);
ActiveSpan.tag(BizTracing.BIZ_TYPE, bizType);
}
}

View File

@ -2,7 +2,7 @@ package cn.iocoder.dashboard.framework.tracer.core.util;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.dashboard.framework.tracer.core.ITrace;
import cn.iocoder.dashboard.util.bean.SpringUtil;
import cn.iocoder.dashboard.util.sping.SpringBeanUtil;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import java.util.UUID;
@ -61,7 +61,7 @@ public class TracerUtils {
* @return ITrace
*/
private static ITrace getTracer() {
return SpringUtil.getBean(ITrace.class);
return SpringBeanUtil.getBean(ITrace.class);
}
/**

View File

@ -0,0 +1,40 @@
package cn.iocoder.dashboard.util.sping;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.Method;
public class SpElUtil {
private SpElUtil() {
}
public static String analysisSpEl(String spElString, ProceedingJoinPoint joinPoint) {
SpelExpressionParser parser = new SpelExpressionParser();
DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
// 通过joinPoint获取被注解方法
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
// 使用spring的DefaultParameterNameDiscoverer获取方法形参名数组
String[] paramNames = nameDiscoverer.getParameterNames(method);
// 解析过后的Spring表达式对象
Expression expression = parser.parseExpression(spElString);
// spring的表达式上下文对象
EvaluationContext context = new StandardEvaluationContext();
// 通过joinPoint获取被注解方法的形参
Object[] args = joinPoint.getArgs();
// 给上下文赋值
for (int i = 0; i < args.length; i++) {
context.setVariable(paramNames[i], args[i]);
}
Object value = expression.getValue(context);
return value == null ? "null" : value.toString();
}
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.dashboard.util.bean;
package cn.iocoder.dashboard.util.sping;
import org.springframework.beans.BeansException;
@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
@Component
public class SpringUtil implements ApplicationContextAware {
public class SpringBeanUtil implements ApplicationContextAware {
/**
* Spring context