【问题标题】:Cassandra Java connection errorCassandra Java 连接错误
【发布时间】:2016-10-12 12:50:13
【问题描述】:

我正在尝试通过 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

【问题讨论】:

  • 听起来你在运行时的类路径中没有 SLF4J。
  • 我已经添加了 SLF4J api jar 文件..但它仍然显示一些错误..
  • 你现在看到了什么异常?
  • 添加 SLF4j jar 文件后,我已针对错误编辑了我的帖子..
  • 那是因为你的类路径中没有 Guava。您是否考虑过使用 Maven 等依赖管理器?如果没有,您需要手动将驱动程序的所有依赖项添加到您的类路径中。

标签: java cassandra datastax


【解决方案1】:

我假设,你有依赖冲突。我在使用 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 .

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 2016-09-05
    • 2014-03-14
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多