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

升级至Spring Boot 2.7.5时出现Sleuth异常求助

Spring Boot/Spring Cloud升级后Sleuth JDBC链路追踪报错解决

问题背景

将项目升级至Spring Boot 2.7.5 + Spring Cloud 2021.0.5版本时,启动报错,核心问题是Sleuth的JDBC instrumentation组件找不到net.ttddyy.dsproxy.proxy.ResultSetProxyLogicFactory类。已尝试:

  • 清理本地M2仓库
  • 切换Spring Cloud版本至2021.0.4、2021.0.3,问题仍未解决

错误日志

Application run failed
java.lang.IllegalStateException: Error processing condition on org.springframework.cloud.sleuth.autoconfig.instrument.jdbc.DataSourceProxyConfiguration.traceResultSetProxyLogicFactory
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:193)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:153)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:129)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:343)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
    at com.shiksha.trend.Application.main(Application.java:69)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.IllegalStateException: @ConditionalOnMissingBean did not specify a bean using type, name or annotation and the attempt to deduce the bean's type failed
    at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.validate(OnBeanCondition.java:494)
    at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.<init>(OnBeanCondition.java:443)
    at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchOutcome(OnBeanCondition.java:154)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47)
    ... 22 common frames omitted
Caused by: org.springframework.boot.autoconfigure.condition.OnBeanCondition$BeanTypeDeductionException: Failed to deduce bean type for org.springframework.cloud.sleuth.autoconfig.instrument.jdbc.DataSourceProxyConfiguration.traceResultSetProxyLogicFactory
    at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.deducedBeanTypeForBeanMethod(OnBeanCondition.java:524)
    at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.deducedBeanType(OnBeanCondition.java:513)
    at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.<init>(OnBeanCondition.java:436)
    ... 24 common frames omitted
Caused by: java.lang.ClassNotFoundException: net.ttddyy.dsproxy.proxy.ResultSetProxyLogicFactory

解决方案

1. 手动添加datasource-proxy依赖

ResultSetProxyLogicFactory类属于datasource-proxy库,Spring Cloud Sleuth的JDBC链路追踪依赖该库,但升级过程中可能因版本适配问题未自动引入。需手动添加依赖:

Maven(pom.xml)

<dependency>
    <groupId>net.ttddyy</groupId>
    <artifactId>datasource-proxy</artifactId>
    <version>1.9</version> <!-- Spring Cloud 2021.x版本兼容1.9+ -->
</dependency>

Gradle(build.gradle)

implementation 'net.ttddyy:datasource-proxy:1.9'

2. 排查并解决依赖冲突

若已存在该依赖但仍报错,可能是版本冲突导致类无法加载。通过以下命令排查依赖树:

Maven

mvn dependency:tree | grep datasource-proxy

Gradle

./gradlew dependencies | grep datasource-proxy

找到冲突的旧版本后,在依赖中排除并强制使用兼容版本。例如Maven中排除冲突:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    <exclusions>
        <exclusion>
            <groupId>net.ttddyy</groupId>
            <artifactId>datasource-proxy</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 临时禁用Sleuth JDBC链路追踪(可选)

如果不需要JDBC链路追踪功能,可临时禁用该配置,避免报错:

application.yml

spring:
  sleuth:
    jdbc:
      enabled: false

application.properties

spring.sleuth.jdbc.enabled=false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:55:20