将 bizType 和 bizId 进行封装,实现 SkyWalking Tag 检索
This commit is contained in:
parent
3018866c62
commit
4cc45d73fb
@ -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";
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
40
src/main/java/cn/iocoder/dashboard/util/sping/SpElUtil.java
Normal file
40
src/main/java/cn/iocoder/dashboard/util/sping/SpElUtil.java
Normal 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();
|
||||
|
||||
}
|
||||
}
|
@ -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
|
Loading…
Reference in New Issue
Block a user