【问题标题】:Spring 4 + Cassandra 3.4 + Not workingSpring 4 + Cassandra 3.4 + 不工作
【发布时间】:2017-09-10 08:54:47
【问题描述】:

我正在尝试使用 Spring 4 连接 Cassandra 3.4,但我无法做到。 我尝试在没有弹簧的情况下连接它,它工作得很好,但是在使用 Spring 时它有一些我无法找出的问题。

我的 CassandraConnectionManager.java

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.HostDistance;
import com.datastax.driver.core.PoolingOptions;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.SocketOptions;

public class CassandraConnectionManager {
    int concurrency = 50;
    int maxRequestsPerConnection = 128;
    int maxConnections = 10;
    int coreConnections = 5;
    int port = 7001;
    String hosts[];
    private Cluster cluster;
    private Session session;

    public CassandraConnectionManager(String hosts, String port, int maxConn, int coreConn) {
        this.maxConnections = maxConn;
        this.coreConnections = coreConn;
        this.port = Integer.parseInt(port);
        this.hosts = hosts.split(",");
        this.CassandraConnect();
    }

    public CassandraConnectionManager(String hosts) {
        this.maxConnections = concurrency / maxRequestsPerConnection + 1;
        this.hosts = hosts.split(",");
        this.CassandraConnect();
    }

    private void CassandraConnect() {
        PoolingOptions pools = new PoolingOptions();
        pools.setCoreConnectionsPerHost(HostDistance.LOCAL, coreConnections);
        pools.setMaxConnectionsPerHost(HostDistance.LOCAL, maxConnections);
        pools.setCoreConnectionsPerHost(HostDistance.REMOTE, coreConnections);
        pools.setMaxConnectionsPerHost(HostDistance.REMOTE, maxConnections);
        pools.setMaxRequestsPerConnection(HostDistance.LOCAL, concurrency);

        Cluster.Builder builder = new Cluster.Builder();
        builder.withPort(port);
        for (String host : hosts) {
            builder.addContactPoints(host);
        }
        builder.withPoolingOptions(pools);
        builder.withSocketOptions(new SocketOptions().setTcpNoDelay(true));
        this.cluster = builder.build();
        this.session = cluster.connect();
        System.out.println("Connected");
    }

    public Session getSession() {
        return this.session;
    }

    /** Close cluster. */

    public void close() {
        cluster.close();
    }
}

我的 CassandraDAO

import org.apache.log4j.Logger;

import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.Session;
import com.netcore.CassandraConnectionManager;

public class CassandraDAO {

    private CassandraConnectionManager casConnManager;
    private Session casSession;
    private PreparedStatement insertIntoP1events;

    final static Logger logger = Logger.getLogger(CassandraDAO.class);

    public CassandraDAO(CassandraConnectionManager casConnManager){
        this.casConnManager = casConnManager;
        this.casSession = casConnManager.getSession();
    }

    public void insert(Person book) {
        StringBuilder sb = new StringBuilder();
          sb.append("INSERT INTO ").append("login_event")
          .append("(id, age, name) ")
          .append("VALUES (").append(book.getId()).append(", '")
          .append(book.getAge()).append("', '")
          .append(book.getName()).append("');");

        String query = sb.toString();
        casSession.execute(query);
    }

}

然后我有一个带有 id,name 年龄的 pojo 和它的 setter getter。

下面是我的 Test.java

public class TEST {
    private static ClassPathXmlApplicationContext ctx ;

    public static void main(String[] args) {
        Person p = new Person("S1", "Test", 24);
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        CassandraDAO casDAO = (CassandraDAO) ctx.getBean("casDao");
        casDAO.insert(p);

    }

}

我的 ApplicaitonContext.xml

    <?xml version='1.0'?>
    <?xml version='1.0'?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd " >



      <bean id="casandraManager" class ="com.test.CassandraConnectionManager" >
            <constructor-arg name="hosts" value="127.0.0.1" />
            <constructor-arg name="port" value="9042" />
            <constructor-arg name="maxConn" value="100" />
            <constructor-arg name="coreConn" value="5" />
            <constructor-arg name="ttlDays" value="7" />
        </bean>

        <bean id="casDao" class="com.test.CassandraDAO" >
            <constructor-arg index="0" ref="casandraManager" />
        </bean>

    </beans>

最后是我的日志

 Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.<init>(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V
    at org.springframework.context.expression.StandardBeanExpressionResolver.<init>(StandardBeanExpressionResolver.java:98)
    at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:625)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:513)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.netcore.TEST.main(TEST.java:20)

没有 Spring 也可以正常工作。

Test2.java

public class Test2 {
    public static void main(String[] args) {
        CassandraConnectionManager cm = new CassandraConnectionManager("localhost", "9042", 2, 2);
        CassandraDAO cd = new CassandraDAO(cm);


    }
}

【问题讨论】:

  • 您在编译应用程序时是否连接到互联网。似乎应用程序无法从 http://www.springframework.org/schema/data/cassandra/ 找到 xsd 架构定义
  • 您是否尝试过搜索错误消息“无法找到 XML 模式命名空间的 Spring NamespaceHandler”?似乎 StackOverflow 上的其他很多人之前都遇到过/问过这个问题,例如stackoverflow.com/questions/1937767/…
  • 是的 Rajith,我已连接到互联网。
  • Yes tylerparsons 我试过还是同样的问题,配置问题:找不到 XML 模式命名空间的 Spring NamespaceHandler [springframework.org/schema/data/cassandra]

标签: java spring cassandra java-8 cassandra-2.0


【解决方案1】:

相同的代码在以下驱动程序中运行完美,驱动程序存在一些问题。

Required JARs

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 2023-03-30
    • 2016-03-26
    • 2014-10-20
    • 2023-04-02
    • 2021-02-07
    • 1970-01-01
    • 2016-07-24
    • 2012-01-16
    相关资源
    最近更新 更多