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

Cassandra-unit是否兼容JDK17?启动EmbeddedCassandra卡住求助

问题原因及解决建议

核心原因分析

  1. 驱动版本冲突
    同时引入Datastax旧版3.x驱动(cassandra-driver-core:3.11.3)和新版4.x OSS驱动(com.datastax.oss:java-driver-core:4.15.0),两类驱动的类结构、依赖组件存在大量冲突,会导致EmbeddedCassandra初始化时出现类加载死锁或依赖解析卡住,且不会抛出明确异常。

  2. Java 17兼容性问题
    Cassandra 4.x虽宣称支持Java 17,但cassandra-unit的封装逻辑可能未完全适配Java 17的模块化限制,部分底层操作(如NIO、文件系统访问)会因模块权限被阻塞,导致启动流程停滞。

  3. Windows平台特殊性
    Cassandra原生对Windows支持有限,EmbeddedCassandra启动时可能遇到:

    • 端口被其他进程占用(默认9042、7000等)
    • 临时目录权限不足,无法写入数据文件
    • 内存分配不足,导致启动过程无响应

解决步骤

  • 统一驱动版本
    移除旧版cassandra-driver-core:3.11.3,仅保留与cassandra-unit 4.3.1.0匹配的4.x OSS驱动,确保依赖完全一致。

  • 添加Java 17适配参数
    在单元测试的JVM参数中添加以下配置,解除模块权限限制:

    --add-opens java.base/java.nio=ALL-UNNAMED
    --add-opens java.base/sun.nio.ch=ALL-UNNAMED
    --add-opens java.base/java.io=ALL-UNNAMED
    
  • 优化Windows环境配置

    1. 检查并释放9042、7000、7199等Cassandra默认端口
    2. 给测试JVM分配足够内存,例如设置:
      -Xmx2G -Xms1G
      
    3. 显式指定EmbeddedCassandra的临时数据目录,确保有读写权限:
      EmbeddedCassandraServerHelper.startEmbeddedCassandra("/path/to/writable/temp/dir");
      
  • 启用调试日志定位卡点
    将日志级别调整为DEBUG,查看EmbeddedCassandra启动时的详细流程,确认卡在初始化的哪个阶段(如存储引擎启动、节点握手等),进一步精准排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:27:01