Spring Boot集成Cassandra启动报错:NoClassDefFoundError求助
com.datastax.driver.core.Session类找不到问题 这个错误的核心原因是Spring Boot Starter Data Cassandra和你手动引入的Cassandra Driver 4.0.0版本不兼容,再加上可能的端口配置偏差,我们一步步来解决:
1. 修复依赖版本冲突
Spring Boot的spring-boot-starter-data-cassandra已经内置了适配当前Spring Boot版本的Cassandra Driver依赖,你手动添加的cassandra-driver-core:4.0.0属于高版本,和Spring Boot 2.1.x(你的spring-core是5.1.9.RELEASE,对应Spring Boot 2.1.x系列)完全不兼容——Driver 4.x重构了部分类结构,导致旧版Spring Data Cassandra无法找到com.datastax.driver.core.Session类。
修改你的依赖配置,移除手动添加的Cassandra Driver:
// 移除这一行冲突依赖 // implementation 'com.datastax.cassandra:cassandra-driver-core:4.0.0' implementation 'org.springframework.boot:spring-boot-starter-data-cassandra' implementation 'io.dropwizard.metrics:metrics-jmx:4.1.0'
2. 修正Cassandra端口配置
你的配置里设置的端口是9142,但Cassandra默认的原生传输端口是9042,除非你手动修改过cassandra.yaml里的native_transport_port参数,否则这个配置会导致后续连接失败。建议先改回默认端口:
@Bean public CassandraClusterFactoryBean cluster() { CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); cluster.setContactPoints("127.0.0.1"); cluster.setPort(9042); // 改为Cassandra默认原生端口 return cluster; }
3. 确认Keyspace已创建
虽然你在配置中指定了testKeySpace,但要确保这个Keyspace已经在Cassandra实例中存在。你可以通过cqlsh连接Cassandra后执行创建命令:
CREATE KEYSPACE IF NOT EXISTS testKeySpace WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};
完成以上步骤后,重新启动Spring Boot应用,应该就能解决启动报错的问题了。
内容的提问来源于stack exchange,提问作者Manuelarte

