Cassandra-unit是否兼容JDK17?启动EmbeddedCassandra卡住求助
问题原因及解决建议
核心原因分析
驱动版本冲突
同时引入Datastax旧版3.x驱动(cassandra-driver-core:3.11.3)和新版4.x OSS驱动(com.datastax.oss:java-driver-core:4.15.0),两类驱动的类结构、依赖组件存在大量冲突,会导致EmbeddedCassandra初始化时出现类加载死锁或依赖解析卡住,且不会抛出明确异常。Java 17兼容性问题
Cassandra 4.x虽宣称支持Java 17,但cassandra-unit的封装逻辑可能未完全适配Java 17的模块化限制,部分底层操作(如NIO、文件系统访问)会因模块权限被阻塞,导致启动流程停滞。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环境配置
- 检查并释放9042、7000、7199等Cassandra默认端口
- 给测试JVM分配足够内存,例如设置:
-Xmx2G -Xms1G - 显式指定EmbeddedCassandra的临时数据目录,确保有读写权限:
EmbeddedCassandraServerHelper.startEmbeddedCassandra("/path/to/writable/temp/dir");
启用调试日志定位卡点
将日志级别调整为DEBUG,查看EmbeddedCassandra启动时的详细流程,确认卡在初始化的哪个阶段(如存储引擎启动、节点握手等),进一步精准排查。
内容的提问来源于stack exchange,提问作者mihai
相关产品推荐
相关产品推荐

