在我的应用程序中,我使用 Tracer bean 来获取跟踪和跨度 ID:
@Service
@RequiredArgsConstructor
public class SomeService {
private final Tracer tracer;
private TracingContext getTracingContext() {
var context = Optional.ofNullable(tracer.currentTraceContext().context());
return TracingContext.builder()
.traceId(context.map(TraceContext::traceId).orElse("null"))
.spanId(context.map(TraceContext::spanId).orElse("null"))
.build();
}
public void doSomeJbob() {
...
var context = getTracingContext();
send_request_using<org.springframework.web.reactive.function.client.WebClient>();
...
}
}
问题是当
management.tracing.enabled
属性设置为 false 时,应用程序不会以 Bean not found 异常启动。
我创建了一个解决方法,我在配置中创建了一个@Bean:
@Bean
@ConditionalOnClass(Tracer.class)
@ConditionalOnProperty(prefix = "management.tracing", name = "enabled", havingValue = "false")
public Tracer defaultTracer() {
return Tracer.NOOP;
}
应用程序启动,但随后使用
send_request_using<org.springframework.web.reactive.function.client.WebClient>();
调用的请求开始失败:
Context does not have an entry for key [class io.micrometer.tracing.handler.TracingObservationHandler$TracingContext]
我做错了什么?跟踪有时不应该被禁用吗?