java - Cassandra Java 连接错误

标签 java cassandra datastax

我正在尝试通过 Java 与我的 Cassandra 实例进行简单连接。我为 cqlsh 创建了一个“演示”键空间,并在 java 程序中创建了一个表。代码如下:

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import java.lang.*;
import java.io.*;

public class GettingStarted {
    public static void main(String args[])
    {
        Cluster clusters;
        Session sessions;

        clusters =Cluster.builder().addContactPoint("127.0.0.1").build();
        sessions =clusters.connect("demo");

        String query ="CREATE TABLE emp(emp_id int PRIMARY KEY, emp_name text, emp_city text, emp_sal int, emp_phone varint);";

        sessions.execute(query);

        System.out.println("table created");
    }
}

我收到以下错误:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at com.datastax.driver.core.Cluster.<clinit>(Cluster.java:63)
    at GettingStarted.main(GettingStarted.java:12)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 2 more

我错过了什么?代码中没有可见的错误。

添加SLF4J jar文件后的错误:

 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureCallback
    at com.datastax.driver.core.Cluster.<init>(Cluster.java:89)
    at com.datastax.driver.core.Cluster.buildFrom(Cluster.java:145)
    at com.datastax.driver.core.Cluster$Builder.build(Cluster.java:981)
    at GettingStarted.main(GettingStarted.java:12)
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.FutureCallback
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 4 more

最佳答案

我假设,你有依赖冲突。我在一个使用 Hadoop、HBase 和 Cassandra 的项目中遇到了类似的问题。 就我而言,问题是由与 Guava 的版本冲突引起的。我发现,Guava 版本 16.0.1 具有 Cassandra 3 驱动程序所需的所有功能,并且仍然可以与 HBase(版本 1.1.3)一起使用。

这些是我与 Cassandra 相关的 Maven 依赖项:

<!-- Cassandra Dependencies -->
<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-core</artifactId>
  <version>3.0.0</version>
</dependency>

<!-- Guava (required by Cassandra) -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>16.0.1</version>
</dependency>

下面是我删除所有 Hadoop 和 HBase 依赖项后的依赖项树。

[INFO] mygroup:myartifact:jar:1.0-SNAPSHOT
[INFO] +- com.datastax.cassandra:cassandra-driver-core:jar:3.0.0:compile
[INFO] |  +- io.netty:netty-handler:jar:4.0.33.Final:compile
[INFO] |  |  +- io.netty:netty-buffer:jar:4.0.33.Final:compile
[INFO] |  |  |  \- io.netty:netty-common:jar:4.0.33.Final:compile
[INFO] |  |  +- io.netty:netty-transport:jar:4.0.33.Final:compile
[INFO] |  |  \- io.netty:netty-codec:jar:4.0.33.Final:compile
[INFO] |  \- io.dropwizard.metrics:metrics-core:jar:3.1.2:compile
[INFO] |     \- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] +- com.google.guava:guava:jar:16.0.1:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- commons-configuration:commons-configuration:jar:1.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] |  +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- commons-digester:commons-digester:jar:1.8:compile
[INFO] |  |  \- commons-beanutils:commons-beanutils:jar:1.7.0:compile
[INFO] |  \- commons-beanutils:commons-beanutils-core:jar:1.8.0:compile
[INFO] \- junit:junit:jar:4.12:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test

您可以使用此命令打印出 Maven 依赖关系树:

mvn dependency:tree

如果您没有使用 Maven 或任何其他依赖管理器,那么您必须手动下载 com.datastax.cassandra:cassandra-driver-core:jar 下列出的所有依赖项并将其添加到您的 CLASSPATH .

关于java - Cassandra Java 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767099/

相关文章:

java - 将.java 文件添加到eclipse 中?

java - 如何在 Docker 镜像中安装 Java 9 和 Gradle

ssl - 在启用 SSL 的情况下运行 Cassandra CLI

unit-testing - 使用 spring-boot-starter-test 和 cassandra 进行单元测试

java - Cassandra java驱动程序连接错误

java - 带有本地分页的 GWT/GXT 网格?

java - Hibernate Criteria 唯一结果(键以外的列)

oracle - 将数据从 Oracle 移动到 Cassandra 和/或 MongoDB

cassandra - 如何从 Cassandra 的种子列表中删除节点而不丢失数据?

cassandra - 使用字符串连接更新 cassandra 字段