首页 > 解决方案 > Spring Data Cassandra 连接问题

问题描述

我正在尝试连接 Spring 数据 cassandra 我有 cassandra 服务器在网络上运行。这是详细信息

spring.data.cassandra.contact-points=192.168.33.10
spring.data.cassandra.cluster-name=GEO-LOCAL-Cluster
spring.data.cassandra.port=9042
spring.data.cassandra.keyspace-name=organizationlicenses
spring.data.cassandra.username=cassandra
spring.data.cassandra.password=cassandra

当我试图自动注入这些属性时,我已经通过 spring.data 为它们添加前缀。但是,我遇到的大多数示例和信息都使用如下扩展的配置类 CassandraConfig extends AbstractCassandraConfiguration ...

@Bean
public CassandraCqlClusterFactoryBean cluster() {
    CassandraCqlClusterFactoryBean cluster = 
      new CassandraClusterFactoryBean();
    cluster.setContactPoints(properties.getContactPoints());
    cluster.setPort(properties.getPort());
    cluster.setUsername(properties.getUsername());
    cluster.setPassword(properties.getPassword());

    return cluster;
}

这是我得到的例外 -

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in class path resource [com/example/demo/DemoClientCassandraConfiguration.class]: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /192.168.33.10:9042 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces))

我不确定我错过了什么。如何使用配置类指定集群名称 GEO-LOCAL-Cluster。我已经跟踪所有属性都正确填充。

我在实体类上使用了@Table,在应用程序的主要方法上使用了@EnableCassandraRepositories。

标签: javaspringspring-bootcassandraspring-data-cassandra

解决方案


以下是为 Cassandra 客户端设置连接的三个强制性设置:

  • 设置 Cassandra 服务器运行的主机名(contactPoints)
  • 端口只是监听端口。
  • KeyspaceName 是基于 Cassandra 相关概念定义节点上数据复制的命名空间。

Cassandra 的配置

@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {

    //Must override this method
    @Override
    protected String getKeyspaceName() {
        return "sampleKeySpace";
    }

    @Bean
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster = 
          new CassandraClusterFactoryBean();
        cluster.setContactPoints("127.0.0.1");
        cluster.setPort(9142);
        return cluster;
    }

    @Bean
    public CassandraMappingContext cassandraMapping() 
      throws ClassNotFoundException {
        return new BasicCassandraMappingContext();
    }
}

创建 EntityCassandraRepository

@Repository
public interface EntityRepository extends CassandraRepository<Entity> {

}

同一仓库的配置

@Configuration
@EnableCassandraRepositories(
  basePackages = "org.yates.data.cassandra.repository")
public class CassandraConfig extends AbstractCassandraConfiguration {

}

推荐阅读