You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot3迁移Micrometer后,WebTestClient测试TraceId传播失败

迁移至Spring Boot 3并从Sleuth切换到Micrometer后,WebTestClient无法测试TraceId传播

将项目迁移到Spring Boot 3,同时把Sleuth替换成Micrometer后,我没法再用WebTestClient结合Tracer来测试TraceId的传播了。

我写了一个简单的@RestController,期望TraceId能通过Tracer传播:

@RestController
class MyTraceIdController(@Autowired private val tracer: Tracer) {

    @GetMapping("/trace")
    fun info(): ResponseEntity<String> {

        val traceKey = "x-b3-traceid"

        // 运行时能通过tracer拿到traceId,但测试时拿不到
        val responseHeaders = HttpHeaders()
        responseHeaders.set(traceKey, tracer.currentSpan()?.context()?.traceId().toString())

        return ResponseEntity
            .ok()
            .headers(responseHeaders)
            .body("OK")
    }

}

我的目标是用WebTestClient对这个接口进行测试:

@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class MyTraceIdTests(@Autowired private val webTestClient: WebTestClient) {

    @Test
    fun `Assert info endpoint works as expected with webTestClient`() {

        val traceKey = "x-b3-traceid"
        val traceValue = "463ac35c9f6413ad48485a3953bb6124"

        val spanKey = "x-b3-spanid"
        val spanValue = "a2fb4a1d1a96d312"

        webTestClient.get()
            .uri("http://localhost:9080/trace")
            .header(traceKey, traceValue)
            .header(spanKey, spanValue)
            .exchange()
            .expectStatus().isOk
            .expectHeader().valueEquals(traceKey, traceValue)
            .expectBody<String>().isEqualTo("OK")
    }

}

之前用Sleuth的时候,测试中注入的BraveTracer能完美实现TraceId传播,但切换到Micrometer后,无法注入可正常工作的Tracer。

我观察到两种不同的行为:

  • 运行时:执行bootRun后用curl调用端点,通过BraveAutoconfiguration注入的BraveTracer工作正常 => 符合预期
  • 测试时:无法注入正确的BraveTracer Bean => TraceId始终为空

我尝试了多种方法但均未成功:

  • 使用SimpleTracer()
  • 按照Micrometer文档实现自定义Tracer Bean
  • 在测试中引入BraveAutoconfiguration或手动实例化相关Bean

这些方法都无法生成可传播TraceId的Bean。我希望能找到一种简单的方式注入BraveAutoconfiguration提供的可用Bean,请问我遗漏了什么?是否需要调整测试方式?


内容的提问来源于stack exchange,提问作者Benoît Voglevette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:12:26