spring-boot - 引起:com.datastax.oss.driver.api.core.InvalidKeyspaceException: Invalid keyspace mykeyspace in Spring Boot Cassandra
问题描述
我设计了一个使用 Spring boot 和 Cassandra 的项目,它在 Docker Container 上运行。
在我实现了 Cassandra 的配置后,我运行了这个项目,它抛出了如下所示的错误。
Caused by: com.datastax.oss.driver.api.core.InvalidKeyspaceException: Invalid keyspace mykeyspace
我该如何解决这个问题?
这是我的 application.properties 文件。
spring.cassandra.contactpoints=127.0.0.1
spring.cassandra.port=9042
spring.data.cassandra.keyspace-name=mykeyspace
spring.cassandra.basepackages=com.springboot.cassandra
这是Cassandra的配置文件
@Configuration
@EnableCassandraRepositories
public class CassandraConfiguration extends AbstractCassandraConfiguration {
@Value("${spring.cassandra.contactpoints}")
private String contactPoint;
@Value("${spring.cassandra.port}")
private int port;
@Value("${spring.data.cassandra.keyspace-name}")
private String keyspaceName;
@Value("${spring.cassandra.basepackages}")
private String basePackages;
@Override
protected String getKeyspaceName() {
return keyspaceName;
}
@Override
protected int getPort() {
return port;
}
@Override
protected String getContactPoints() {
return contactPoint;
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
@Override
public String[] getEntityBasePackages() {
return new String[] {basePackages};
}
}
解决方案
默认情况下,Spring Data不会为您创建或更改架构。这对于大多数用例来说都是一件好事,因为通常您不希望基于 java 类创建模式。一般来说,改变会更糟,特别是对 Cassandra 来说也很困难。
如果你想让 spring 创建它,你需要:
spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS
我仍然建议不要在生产中使用它。
然而,在谈论键空间时,根据我的知识和文档的措辞, 即使您使用上面的代码,spring 也不会创建键空间。这对 Cassandra 来说很有意义,因为键空间需要诸如复制策略和复制因子之类的信息,后者会因诸如添加或删除新数据中心之类的事情而改变。这些是不应该留给 Spring 的管理任务。
推荐阅读
- python - 如何让机器人在 python 中回复我后删除你的命令
- mysql - 使用 csv 值作为 mysql 查询中的列
- websocket - 如何在 okhttp 中获取 websocket 连接信息
- apache-kafka - 一个topic有3个replicas,min.insyinc.replicas有2个,当follower和in-syinc的replicas都挂了,消费者想读的时候怎么办?
- excel - 自动填充公式,但限制一个或多个单元格 - Google 表格
- javascript - 未处理的拒绝类型错误:无法读取 null 的属性“id”
- swagger - 如何在 Open API Specifiaction V3 中定义接受标头
- keyboard-shortcuts - 快捷方式 CMD-A 或 CMD-Z 退出 TradingView 应用程序。(AZERTY 键盘布局)
- python - 如何检查 csv 生成的数据帧格式是否正确
- ios - 将模态视图控制器视图居中而不访问超级视图