Spring boot 卡桑德拉+;SpringBoot,java.lang.ClassNotFoundException:com.datastax.oss.protocol.internal.SegmentCodec
我正在尝试使用Cassandra DB创建一个Spring应用程序。但是,当我尝试运行应用程序时,出现以下错误Spring boot 卡桑德拉+;SpringBoot,java.lang.ClassNotFoundException:com.datastax.oss.protocol.internal.SegmentCodec,spring-boot,cassandra,classnotfoundexception,cassandra-3.0,spring-data-cassandra,Spring Boot,Cassandra,Classnotfoundexception,Cassandra 3.0,Spring Data Cassandra,我正在尝试使用Cassandra DB创建一个Spring应用程序。但是,当我尝试运行应用程序时,出现以下错误 Caused by: java.lang.NoClassDefFoundError: com/datastax/oss/protocol/internal/SegmentCodec ... 103 common frames omitted Caused by: java.lang.ClassNotFoundException: com.datastax.oss.protoco
Caused by: java.lang.NoClassDefFoundError: com/datastax/oss/protocol/internal/SegmentCodec
... 103 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.datastax.oss.protocol.internal.SegmentCodec
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_152-release]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_152-release]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_152-release]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_152-release]
... 103 common frames omitted
Spring启动版本:2.3.4.0版本
Cassandra(弹簧启动启动器数据Cassandra)版本:3.0.4
application.yml文件:
spring:
data:
cassandra:
keyspaceName: my_keyspace
contactPoints: localhost
port: 9042
schema-action: CREATE_IF_NOT_EXISTS
local-datacenter: datacenter1
CassandraConfig.java
@Configuration
@EnableCassandraRepositories(basePackages = "com.myproject.repository")
public class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${spring.data.cassandra.keyspaceName}")
private String keyspace;
@Value("${spring.data.cassandra.contactPoints}")
private String contactPoints;
@Value("${spring.data.cassandra.port}")
private int port;
@Value("${spring.data.cassandra.local-datacenter}")
private String dataCenter;
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
@Override
protected SessionBuilderConfigurer getSessionBuilderConfigurer() {
return new SessionBuilderConfigurer() {
@Override
public CqlSessionBuilder configure(CqlSessionBuilder cqlSessionBuilder) {
return cqlSessionBuilder
.addContactPoint(new InetSocketAddress(
contactPoints,
getPort()))
;
}
};
}
@Override
protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
return Arrays.asList(CreateKeyspaceSpecification
.createKeyspace(getKeyspaceName())
.ifNotExists(true)
.withSimpleReplication()
.with(KeyspaceOption.DURABLE_WRITES));
}
@Override
protected KeyspacePopulator keyspacePopulator() {
ResourceKeyspacePopulator keyspacePopulate = new ResourceKeyspacePopulator();
keyspacePopulate.setSeparator(";");
keyspacePopulate.setScripts(new ClassPathResource("table-schema.cql"));
return keyspacePopulate;
}
@Override
protected String getKeyspaceName() {
return keyspace;
}
@Override
protected int getPort(){
return port;
}
@Override
public String[] getEntityBasePackages() {
return new String[]{"com.myproject.entity"};
}
@Override
protected String getLocalDataCenter() {
return dataCenter;
}
}
pom.xml中存在以下依赖项(driver.version为4.9.0)
com.datastax.oss
java驱动核心
${driver.version}
com.datastax.oss
java驱动程序查询生成器
${driver.version}
com.datastax.oss
java驱动程序映射器运行时
${driver.version}
尝试添加此依赖项以获取最新的本机协议版本:
<!-- https://mvnrepository.com/artifact/com.datastax.oss/native-protocol -->
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>native-protocol</artifactId>
<version>1.4.11</version>
</dependency>
com.datastax.oss
本机协议
1.4.11
Spring boot似乎链接到了导致此异常的较旧协议版本。非常感谢!我有同样的错误
java.lang.NoClassDefFoundError:com/datastax/oss/protocol/internal/SegmentCodec
,这个答案解决了我的问题!谢谢@bswynn。在这件事上坚持了大约一个星期。你的解决方案救了我。
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-core</artifactId>
<version>${driver.version}</version>
</dependency>
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-query-builder</artifactId>
<version>${driver.version}</version>
</dependency>
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-mapper-runtime</artifactId>
<version>${driver.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.datastax.oss/native-protocol -->
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>native-protocol</artifactId>
<version>1.4.11</version>
</dependency>