Micrometer 跟踪禁用错误:需要找不到类型为“io.micrometer.tracing.Tracer”的 bean

问题描述 投票:0回答:0

在我的应用程序中,我使用 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]

我做错了什么?跟踪有时不应该被禁用吗?

spring-boot trace micrometer zipkin micrometer-tracing
© www.soinside.com 2019 - 2024. All rights reserved.