带有 Cassandra 3.x 驱动程序的 Spring Boot

Posted

技术标签:

【中文标题】带有 Cassandra 3.x 驱动程序的 Spring Boot【英文标题】:Spring Boot with Cassandra 3.x driver 【发布时间】:2017-03-21 18:52:23 【问题描述】:

我使用 Spring Boot 1.3.8.RELEASE。要使用 cassandra 3.x 驱动程序,我尝试了如下操作;

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-cassandra</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-cassandra</artifactId>
        <version>1.4.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>com.datastax.cassandra</groupId>
                <artifactId>cassandra-driver-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.datastax.cassandra</groupId>
                <artifactId>cassandra-driver-dse</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.datastax.cassandra/cassandra-driver-core -->
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.1.0</version>
    </dependency>

但我得到错误;

Caused by: java.lang.NoSuchMethodError: com.datastax.driver.core.DataType.asJavaClass()Ljava/lang/Class;
at org.springframework.data.cassandra.mapping.CassandraSimpleTypeHolder.<clinit>(CassandraSimpleTypeHolder.java:62) ~[spring-data-cassandra-1.4.0.RELEASE.jar:?]

我在https://github.com/spring-projects/spring-boot/issues/5835 尝试过这个原因,有一个帖子;

在 Spring Data Cassandra 1.5 中采用 Cassandra 3 的变化 (Ingalls) 不会对 Spring Boot 进行重大更改。 经过测试 使用 Boot 1.3.3 和 1.4.0-SNAPSHOT 进行升级。

不应该像上面那样吗? 我哪里错了?

注意:我正在尝试这个例子:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-cassandra

【问题讨论】:

…does not impose breaking changes for Spring Boot… 表示可以在 Spring Boot 1.4 中使用 Spring Data Ingalls(转换为 Spring Data Cassandra 1.5)。 Spring Data Ingalls 作为 M1 版本提供。 【参考方案1】:

spring-data-cassandra-1.4.0.RELEASE 取决于 &lt;cassandra.version&gt;2.1.11&lt;/cassandra.version&gt;&lt;cassandra-driver-dse.version&gt;2.1.7.1&lt;/cassandra-driver-dse.version&gt;see https://github.com/spring-projects/spring-data-cassandra/blob/1.4.0.RELEASE/pom.xml。

如果你想使用 Cassandra 3.x,你应该升级到 spring-boot 1.5.x 以受益于 spring-boot-starter-data-cassandra:1.5.x,这取决于 &lt;cassandra.version&gt;3.0.0&lt;/cassandra.version&gt;&lt;cassandra-driver.version&gt;3.0.3&lt;/cassandra-driver.version&gt;see @ 987654322@

从 pom 文件中删除 Cassandra 驱动程序依赖项。 Spring boot 会提供正确的版本

【讨论】:

使用 1.5.0.BUILD-SNAPSHOT 并且看起来它正在工作。知道什么时候会有1.5.0.RELEASE 吗? Spring-boot 1.5.0 尚未发布。

以上是关于带有 Cassandra 3.x 驱动程序的 Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

带有 Cassandra 服务的 Selenium Web 驱动程序

如何动态设置 Spring Data Cassandra 键空间?

Cassandra:带有地图结果的 UDF 在 Java 中获取 CodecNotFoundException

cassandra 3.x官方文档---概况

Cassandra 3.x - 将 3 个节点添加到 6 节点集群

本地安装Cassandra