2017-01-26 40 views
1

Обновление (2017-JAN-31) Код всего кода можно получить здесь: C Y Kan's Mastering Cassandra Tutorial Video with free sample code. Я попытался улучшить главу 54 с образцом кода из skk, и это не помогло. Помп ниже на самом деле из главы 52 (я думаю, CY забыл изменить тег имени, когда он скопировал pom.xml).Требуется: Помогите сделать SpringBoot CassandraTemplate Пример работы

Независимо от того, что я делаю, я получаю одну из следующих ниже ошибок в зависимости от того, какие версии я указываю (или если я укажу версию) для Cassandra-Driver-Core.

Как предложил skk, я попробовал весеннюю загрузку 1.4.4 и другие версии.

Я подтвердил, что у меня действительно есть пространство ключей «cwt» и лицо, определенное в Кассандре. Какие еще детали вам нужны?

Хорошо, вот моя попытка улучшить исходный код CY Kan с предложением Skk. Это приводит к ошибке ниже о невозможности создания сеанса bean. Если я явно укажу 3.1.2 ядро ​​драйвера Cassandra, он успешно подключится, но даст мне ошибку noSuchMethod. В отличие от ошибки в главе 52 (ниже), ошибка noSuchMethod происходит в компоненте Cassandra Mapping в главе 54.

package com.cassandrawebtrader.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.cassandra.config.CassandraClusterFactoryBean; 
import org.springframework.data.cassandra.config.java.AbstractCassandraConfiguration; 
import org.springframework.data.cassandra.mapping.BasicCassandraMappingContext; 
import org.springframework.data.cassandra.mapping.CassandraMappingContext; 
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; 

@Configuration 
@EnableCassandraRepositories(basePackages="com.cassandrawebtrader") 
public class CassandraConfig extends AbstractCassandraConfiguration { 

    @Override 
    protected String getKeyspaceName() { 
     // TODO Auto-generated method stub 
     return "cwt"; 
    } 
    /* 
    @Bean 
    public CassandraClusterFactoryBean cluster() { 
     CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
     cluster.setContactPoints("127.0.0.1"); 
     cluster.setPort(9042); 

     return cluster; 
    } 
    */ 
    @Bean 
    public CassandraMappingContext cassandraMapping() { 
     return new BasicCassandraMappingContext(); 
    } 


    // begin paste from http://stackoverflow.com/questions/41881168/wanted-help-making-springboot-cassandratemplate-example-work/41910388#41910388 


    String cassandraContactPoints = "127.0.0.1"; 
    String cassandraPort = "9042"; 

    @Bean 
    public CassandraClusterFactoryBean cluster() { 
     CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
     cluster.setContactPoints(cassandraContactPoints); 
     cluster.setPort(Integer.parseInt(cassandraPort)); 
     return cluster; 
    } 

    @Bean 
    public CassandraMappingContext mappingContext() { 
     return new BasicCassandraMappingContext(); 
    } 

    @Bean 
    public org.springframework.data.cassandra.convert.CassandraConverter converter() { 
     return new org.springframework.data.cassandra.convert.MappingCassandraConverter(mappingContext()); 
    } 

    @Bean 
    public org.springframework.data.cassandra.config.CassandraSessionFactoryBean session() throws Exception { 
     org.springframework.data.cassandra.config.CassandraSessionFactoryBean session = new org.springframework.data.cassandra.config.CassandraSessionFactoryBean(); 
     session.setCluster(cluster().getObject()); 
     session.setKeyspaceName(getKeyspaceName()); 
     session.setConverter(converter()); 
     session.setSchemaAction(org.springframework.data.cassandra.config.SchemaAction.NONE); 
     return session; 
    } 
    /* 
    @Bean 
    public org.springframework.data.cassandra.core.CassandraOperations cassandraTemplate() throws Exception { 
     return new org.springframework.data.cassandra.core.CassandraTemplate(session().getObject()); 
    } 
    */ 
    // end paste from http://stackoverflow.com/questions/41881168/wanted-help-making-springboot-cassandratemplate-example-work/41910388#41910388 

} 

Какие другие подробности вы хотели бы?

Обновление (2017-JAN-30): skk, пожалуйста, напишите свой код драйвера java.

Как было предложено skk, я попробовал предложенный номер версии и попробовал предложенные компоненты.

я все еще получаю подобную ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraMapping' defined in class path resource [com/cassandrawebtrader/config/CassandraConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.mapping.CassandraMappingContext]: Factory method 'cassandraMapping' threw exception; nested exception is java.lang.NoSuchMethodError: com.datastax.driver.core.DataType.asJavaClass()Ljava/lang/Class; 

Благодарности

Ранее обновление: Как было предложено, я попытался удалить номера версий для компонентов Cassandra и просто указать 1.4.3.RELEASE для весна-загрузки-стартер-родитель, и я получил эту ошибку:

Error creating bean with name 'session' defined in class path resource [org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.class]: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces))

Так что теперь он даже не подключен (до его подключения).

Оригинал: После многих часов поиска Google и не найдя каких-либо образцов Java/пружинно-загрузочные/Cassandra, которые работают, я, наконец, нашел пример CQLTemplate в главе 52 из видео здесь: [PacktPub CY Кана Mastering Кассандры 2nd Ed ] работает. 1. Это работает! (Тем не менее, мне нужно использовать CassandraTemplate вместо CQLTemplate).

Это означает, что у меня есть Cassandra 3.9 правильно работает на Windows 10 и java 1.8 - вы согласны?

Следующий пример (глава 53 из этого учебника) использует CassandraTemplate и я получаю эту ошибку:

java.lang.NoSuchMethodError: com.datastax.driver.core.DataType.asJavaClass()Ljava/lang/Class;

я обнаружил в главе 52, что я должен изменить версию com.datastax.cassandra/Cassandra -driver-core от 2.1.6 до 3.0.0. Я экспериментировал с изменением версий com.datastax.cassandra/assandra-driver-mapping и пока не повезло. Вот мой слегка измененный pom.xml, который я загрузил из PacktPub (см. Ниже). Может ли кто-нибудь помочь мне выполнить эту работу или предложить другой пример CassandraTemplate (который отображает POJO в базе данных Cassandra), который работает?

спасибо! Siegfried

<?xml version="1.0" encoding="UTF-8"?> 

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<groupId>com.cassandrawebtrader</groupId> 
<artifactId>chapter51</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>chapter51</name> 
<description>Demo project for Spring Boot</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <!--<version>1.2.5.RELEASE</version> --> 
    <version>1.2.8.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-cassandra</artifactId> 
    </dependency> 

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

    <dependency> 
     <groupId>com.datastax.cassandra</groupId> 
     <artifactId>cassandra-driver-mapping</artifactId> 
     <version>3.0.0</version> <!-- 2.1.6 --> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-mongodb</artifactId> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

+0

Есть ли причина, по которой вы используете старую версию весенней загрузки? Текущая версия 1.4.3.RELEASE. Тогда вам не нужно беспокоиться о настройке версий драйвера cassandra, поскольку по умолчанию они имеют вышеупомянутую версию, вероятно, будут реализовывать этот вызов метода. – anand1st

+0

Это не сработало, потому что у меня другая ошибка. – user3477493

+0

Различные ошибки могут означать прогресс в некоторых случаях. Возможно, вам следует отредактировать сообщение и добавить указанную ошибку. Или это было выше NoHostAvailableException? – anand1st

ответ

0

Вы можете использовать ниже например: Spring boot version - 1.4.3 и Spring-data cassandra version - 1.4.6. Сообщите мне, если вам нужен пример кода для драйвера Java.

@Configuration 
public class CassandraConfig { 

    @Bean 
    public CassandraClusterFactoryBean cluster() { 
     CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
     cluster.setContactPoints(cassandraContactPoints); 
     cluster.setPort(Integer.parseInt(cassandraPort)); 
     return cluster; 
    } 

    @Bean 
    public CassandraMappingContext mappingContext() { 
     return new BasicCassandraMappingContext(); 
    } 

    @Bean 
    public CassandraConverter converter() { 
     return new MappingCassandraConverter(mappingContext()); 
    } 

    @Bean 
    public CassandraSessionFactoryBean session() throws Exception { 
     CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
     session.setCluster(cluster().getObject()); 
     session.setKeyspaceName(cassandraKeyspace); 
     session.setConverter(converter()); 
     session.setSchemaAction(SchemaAction.NONE); 
     return session; 
    } 

    @Bean 
    public CassandraOperations cassandraTemplate() throws Exception { 
     return new CassandraTemplate(session().getObject()); 
    } 
}