Spring WebFlux(R2DBC)项目引入Spring Cloud Sleuth启动失败求助
问题解决步骤
1. 修复版本兼容性问题
Spring Cloud Sleuth旧版本(如Hoxton及更早)与Java 17、Spring WebFlux/R2DBC生态存在兼容性冲突,org.springframework.cloud.commons.httpclient.HttpClientConfiguration类在新版Spring Cloud Commons中已被重构或移除。建议升级到**Spring Cloud 2022.0.x(Kilburn)**及以上版本,该系列版本原生支持Java 17,且适配WebFlux/R2DBC环境。
在Maven的pom.xml中指定兼容的依赖管理版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2022.0.4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2. 解决JMX缺失类问题
Java 17移除了javax.management.remote.rmi.RMIServerImpl_Skel等废弃JMX类,旧版Sleuth可能依赖这些类实现监控功能。处理方式二选一:
- 直接升级到步骤1中兼容Java 17的Sleuth版本,新版已替换掉对废弃JMX类的依赖;
- 若必须保留旧版Sleuth,手动添加JMX远程模块依赖:
<dependency> <groupId>com.sun.jmx</groupId> <artifactId>jmxremote</artifactId> <version>1.0.1_04</version> <scope>runtime</scope> </dependency>
3. 处理KeyStore名称为空问题
该问题源于Sleuth默认HTTP客户端配置在WebFlux环境下未正确初始化,可通过两种方式解决:
- 显式禁用Sleuth的HTTP客户端自动配置,在
application.yml中添加:spring: autoconfigure: exclude: org.springframework.cloud.sleuth.instrument.web.client.TraceWebClientAutoConfiguration - 手动配置带追踪功能的WebClient,确保KeyStore参数正常加载:
@Configuration public class SleuthWebClientConfig { @Bean public WebClient.Builder tracedWebClientBuilder(TraceWebClientCustomizer customizer) { WebClient.Builder builder = WebClient.builder(); customizer.customize(builder); return builder; } }
4. 精简依赖模块
避免引入不必要的Sleuth组件,若仅需WebFlux环境下的追踪,只保留相关模块:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-instrumentation</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-webflux</artifactId> </dependency>
内容的提问来源于stack exchange,提问作者SRJ
相关产品推荐
相关产品推荐

