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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:20:29