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

Spring Boot集成OpenTelemetry启动时遇DoubleGauge类找不到异常

Spring Boot Starter OpenTelemetry 2.7.0 启动时缺失DoubleGauge类问题

问题详情

使用Spring Boot Starter OpenTelemetry(版本2.7.0)启动Spring Boot应用时,抛出ClassNotFoundException,提示找不到io.opentelemetry.api.incubator.metrics.DoubleGauge类。

采用Gradle构建,依赖配置包含opentelemetry-spring-boot-starter、opentelemetry-instrumentation-bom,同时引入了micrometer-tracing、micrometer-tracing-bridge-otel以及Spring Boot标准的actuator和web依赖。已尝试移除所有自定义配置恢复默认,但问题仍未解决,且无法定位该类所属依赖库,操作完全遵循OpenTelemetry官方文档。

错误栈

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'autoConfiguredOpenTelemetrySdk' defined in class path resource [io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration$OpenTelemetrySdkConfig.class]: Failed to instantiate [io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk]: Factory method 'autoConfiguredOpenTelemetrySdk' threw exception with message: io/opentelemetry/api/incubator/metrics/DoubleGauge
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-6.1.11.jar:6.1.11]
    ...
    ... 133 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk]: Factory method 'autoConfiguredOpenTelemetrySdk' threw exception with message: io/opentelemetry/api/incubator/metrics/DoubleGauge
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178) ~[spring-beans-6.1.11.jar:6.1.11]
    ...
    ... 148 common frames omitted
Caused by: java.lang.ClassNotFoundException: io.opentelemetry.api.incubator.metrics.DoubleGauge
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
    ... 166 common frames omitted

Gradle配置

settings.toml

spring-boot-starter-opentelemetry = {group = "io.opentelemetry.instrumentation", name = "opentelemetry-spring-boot-starter", version = { ref = "opentelemetry" }}
spring-boot-starter-opentelemetry-bom = {group = "io.opentelemetry.instrumentation", name = "opentelemetry-instrumentation-bom", version = { ref = "opentelemetry" }}

...

opentelemetry = "2.7.0"

依赖管理配置

plugins { 
    alias(libs.plugins.dependency.management)
}
        
plugins.apply(libs.plugins.dependency.management.get().pluginId)
dependencyManagement {
    imports {
        ...
        mavenBom(libs.spring.boot.starter.opentelemetry.bom.get().toString())
        mavenBom(SpringBootPlugin.BOM_COORDINATES)
    }
    dependencies {
        ...
    }
}

解决方案

  1. 明确类归属:io.opentelemetry.api.incubator.metrics.DoubleGauge属于OpenTelemetry API的孵化器模块,对应依赖为io.opentelemetry:opentelemetry-api-incubator。
  2. 调整BOM导入顺序:当前配置先导入OpenTelemetry BOM再导入Spring Boot BOM,可能引发版本冲突。将Spring Boot BOM放在OpenTelemetry BOM之前导入,确保Spring Boot管理的依赖版本优先级正确:
    dependencyManagement {
        imports {
            mavenBom(SpringBootPlugin.BOM_COORDINATES)
            mavenBom(libs.spring.boot.starter.opentelemetry.bom.get().toString())
            ...
        }
        ...
    }
    
  3. 显式添加孵化器依赖:若调整BOM顺序后问题仍存在,直接在依赖中添加opentelemetry-api-incubator,版本与OpenTelemetry保持一致:
    implementation "io.opentelemetry:opentelemetry-api-incubator:2.7.0"
    
  4. 验证依赖一致性:执行gradle dependencies命令检查依赖树,确保所有OpenTelemetry相关依赖版本统一,不存在不一致的子依赖引入。

内容的提问来源于stack exchange,提问作者JoJo46

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:10:02