Spring 3.0升级后启动失败:缺失brave.Tracing Bean求助
解决Spring 3.0升级后找不到brave.Tracing Bean的问题
1. 修正依赖版本与结构
Spring Boot 3.x 对Micrometer Tracing的依赖管理更推荐通过starter统一版本,避免手动指定版本导致的兼容性问题。替换你当前的pom依赖为:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <dependency> <groupId>io.zipkin.reporter2</groupId> <artifactId>zipkin-reporter-brave</artifactId> </dependency>
- 移除手动指定的
micrometer-tracing依赖,micrometer-tracing-bridge-brave已包含该依赖 - 引入
spring-boot-starter-actuator后,Spring Boot会自动管理所有相关依赖的版本,适配Spring 3.x环境
2. 修复application.yml配置错误
你的配置存在缩进错误和路径错误,修正后如下:
management: tracing: sampling: probability: 1.0 enabled: true # 必须启用追踪,否则Spring不会创建Tracing相关Bean zipkin: endpoint: "my endpoint url" # 修正配置路径,Spring Boot 3.x中Zipkin端点的正确路径是management.zipkin.endpoint
- 注意
enabled字段的缩进,需与probability同级 - 将
enabled设为true,关闭状态下不会生成Tracing相关Bean
3. 优化代码中的Bean注入
方案一:推荐使用Tracer API(符合Micrometer Tracing规范)
Micrometer Tracing推荐直接注入Tracer而非底层的brave.Tracing,它是更上层的标准API,Spring自动配置会默认提供该Bean:
import io.micrometer.tracing.Tracer; import org.springframework.stereotype.Service; @Service public class MockServiceImpl implements MockService { public static final String Y = "Y"; private final Tracer tracer; private final ScenarioRunner scenarioRunner; private final ObjectMapper objectMapper; // Spring 3.x推荐构造器注入,避免字段注入的弊端 public MockServiceImpl(Tracer tracer, ScenarioRunner scenarioRunner, ObjectMapper objectMapper) { this.tracer = tracer; this.scenarioRunner = scenarioRunner; this.objectMapper = objectMapper; } public void publishMockOutput(Message<GenericRecord> msg, MockInfo info) { String scenarioId = tracer.currentSpan().context().traceId(); } }
方案二:若必须使用brave.Tracing
如果业务确实需要直接使用brave.Tracing,可以手动配置Bean:
import brave.Tracing; import io.micrometer.tracing.brave.bridge.BraveTracer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TracingConfig { @Bean public Tracing tracing(BraveTracer braveTracer) { return braveTracer.getBraveTracer().tracing(); } }
配置完成后即可在Service中正常注入Tracing,但仍优先推荐方案一的标准API,兼容性更强。
内容的提问来源于stack exchange,提问作者Madhavi vasantala
相关产品推荐
相关产品推荐

