java - 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。
解决方案
以下是为 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 {
}
推荐阅读
- ios - 尝试使用 switch 语句来更改图像集
- php - PHP 处理表单,通过 POST 从 HTML 表单写入 CSV 文件
- node.js - 如何根据用户的日历事件触发 NodeJS 服务
- firebase - 如何在运行 Win10 IOT Core 的 RaspberryPi 的 UWP 应用程序中集成 firestore?
- django - 使用 Django Rest Framework 时在哪里执行附加操作
- javascript - 在 try catch 块中声明不可变变量,可以在块外访问?
- recursion - 从数字中减去 1(Prolog 中的递归)
- windows - React-native - expo cli - npm install new project 错误消息 - Unable_to_get_issuer_cert_locally
- php - 在 MySQL 中使用外键将数据插入表中
- java - 您是否需要一个数据库来将数据存储在 Java 桌面应用程序中?