升级至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
相关产品推荐
相关产品推荐

