Commit 5202270d authored by 杨锐's avatar 杨锐

add annotation DynamicTrace.

parent f01acec1
...@@ -40,6 +40,11 @@ ...@@ -40,6 +40,11 @@
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<optional>true</optional>
</dependency>
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
......
package cn.quantgroup.tech.brave.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DynamicTrace {
}
package cn.quantgroup.tech.brave.annotation;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Aspect
@Component
public class DynamicTraceAspect {
@Resource
private Tracing tracing;
@Around("@annotation(cn.quantgroup.tech.brave.annotation.DynamicTrace)")
public Object dynamicTrace(ProceedingJoinPoint pjp) throws Throwable {
Tracer tracer = tracing.tracer();
/* 防止应用层非法使用(上下文中存在span),不生成root span。 */
if (tracer.currentSpan() == null) {
Span span = tracer.newTrace();
try (Tracer.SpanInScope ws = tracer.withSpanInScope(span)) {
return pjp.proceed();
// note: try-with-resources closes the scope *before* the catch block
} catch (RuntimeException | Error e) {
span.error(e);
throw e;
} finally {
span.finish();
}
}
return pjp.proceed();
}
}
...@@ -17,6 +17,7 @@ import java.util.concurrent.ExecutorService; ...@@ -17,6 +17,7 @@ import java.util.concurrent.ExecutorService;
public class TechExecutorServiceBuilderNoTrace implements ITechExecutorServiceBuilder { public class TechExecutorServiceBuilderNoTrace implements ITechExecutorServiceBuilder {
@Override @Override
public ExecutorService buildExecutorService(ExecutorService executorService) { public ExecutorService buildExecutorService(ExecutorService executorService) {
log.info("构建ExecutorServiceNoTrace");
return executorService; return executorService;
} }
} }
...@@ -20,6 +20,7 @@ import java.util.concurrent.ExecutorService; ...@@ -20,6 +20,7 @@ import java.util.concurrent.ExecutorService;
public class TechExecutorServiceBuilderTrace implements ITechExecutorServiceBuilder { public class TechExecutorServiceBuilderTrace implements ITechExecutorServiceBuilder {
@Override @Override
public ExecutorService buildExecutorService(ExecutorService executorService) { public ExecutorService buildExecutorService(ExecutorService executorService) {
log.info("构建ExecutorServiceTrace");
CurrentTraceContext mdcCurrentTraceContext = MDCCurrentTraceContext.create(); CurrentTraceContext mdcCurrentTraceContext = MDCCurrentTraceContext.create();
return mdcCurrentTraceContext.executorService(executorService); return mdcCurrentTraceContext.executorService(executorService);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment