Reactive Spring Boot中Cassandra与Sleuth共存时连接创建失败求助
问题:Reactive Spring Boot集成Cassandra与Sleuth时连接创建失败
问题详情
在Reactive Spring Boot项目中,尝试通过响应式Cassandra依赖建立连接读取数据,同时引入Spring Cloud Sleuth后出现reactiveSession Bean初始化失败的问题。注释掉Sleuth依赖后Cassandra连接恢复正常,需解决两者共存的兼容问题。
依赖配置
// Cassandra响应式相关依赖 implementation 'org.springframework.data:spring-data-cassandra:2.2.5.RELEASE' implementation 'io.projectreactor:reactor-core' // 引发冲突的Sleuth依赖 implementation("org.springframework.cloud:spring-cloud-starter-sleuth")
报错日志
{ "@version":1, "source_host":"192.168.1.3", "message":"Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'reactiveSession' defined in class path resource [com/company/pai/gm/ws/core/config/CassandraConfig.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.sleuth.instrument.cassandra.TraceReactiveSession] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@67424e82]", "thread_name":"main", "@timestamp":"2023-04-13T19:26:26.637+05:30", "level":"WARN", "logger_name":"org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext" }
已尝试操作
- 调整Spring Data Cassandra依赖版本,未解决问题;
- 注释掉
spring-cloud-starter-sleuth依赖后,Cassandra连接正常。
解决方案建议
1. 统一Spring Boot与Spring Cloud版本
核心问题是版本不兼容:Spring Cloud Sleuth的版本需与Spring Boot、Spring Data Cassandra严格匹配。
- 由于使用的
spring-data-cassandra:2.2.5.RELEASE属于Spring Boot 2.2.x生态,对应Spring Cloud的Hoxton版本(如Hoxton.SR8); - 修改Sleuth依赖为对应版本:
implementation("org.springframework.cloud:spring-cloud-starter-sleuth:Hoxton.SR8")
2. 排查并解决依赖冲突
使用Gradle命令检查依赖树,确认是否存在多版本冲突:
# 检查Cassandra相关依赖 ./gradlew dependencyInsight --dependency org.springframework.data:spring-data-cassandra # 检查Sleuth相关依赖 ./gradlew dependencyInsight --dependency org.springframework.cloud:spring-cloud-starter-sleuth
若发现冲突,通过exclude命令排除低版本或不兼容的依赖。
3. 显式引入Sleuth的Cassandra instrumentation依赖
如果自动引入的instrumentation版本不匹配,可手动指定对应版本:
implementation 'org.springframework.cloud:spring-cloud-sleuth-instrument-cassandra:Hoxton.SR8'
4. 自定义ReactiveSession Bean(备选方案)
若版本调整后仍无法解决,可手动创建ReactiveSession Bean,绕过Sleuth的自动代理(注意:此方式会丢失Cassandra操作的链路追踪能力):
@Configuration public class CassandraConfig extends AbstractReactiveCassandraConfiguration { // 配置Cassandra连接信息... @Override protected String getContactPoints() { return "your-cassandra-host"; } @Override protected int getPort() { return 9042; } @Override protected String getKeyspaceName() { return "your-keyspace"; } @Override @Bean public ReactiveSession reactiveSession() { // 直接返回父类创建的会话,跳过Sleuth代理 return super.reactiveSession(); } }
内容的提问来源于stack exchange,提问作者Deep Kiran
相关产品推荐
相关产品推荐

