Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 卡桑德拉+;SpringBoot,java.lang.ClassNotFoundException:com.datastax.oss.protocol.internal.SegmentCodec_Spring Boot_Cassandra_Classnotfoundexception_Cassandra 3.0_Spring Data Cassandra - Fatal编程技术网

Spring boot 卡桑德拉+;SpringBoot,java.lang.ClassNotFoundException:com.datastax.oss.protocol.internal.SegmentCodec

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

我正在尝试使用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.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>