如何解决Spring-Data-Cassandra SchemaAction不起作用
我正在尝试通过扩展CassandraAutoConfiguration
我正在使用弹簧CassandraRepository
进行数据库访问,并使用带有o.s.d.cassandra.core.mapping.Table
批注的类来定义我的表。
spring:
data:
cassandra:
schema-action: CREATE_IF_NOT_EXISTS
但是在应用程序启动时,Cassandra中没有创建表。
schemaAction
中的CassandraProperties
无法正常工作。
如果我使用ApplicationRunner
在cassandratemplate.getCqlOperations().execute(...)
中以编程方式创建表,则一切正常。
在这种情况下,我可以使用我的存储库。 find()和save()方法。 只是为了证明我的@table类编写正确
解决方法
这是我注意到的行为。这不仅适用于application.yaml
-
当您不创建任何扩展
AbstractCassandraConfiguration
的bean时,spring-data将读取spring.data.*
中与application.yaml
匹配的每个键,包括您提供的模式操作。 (按照惯例)。我看不到您提供的文件有任何问题,实际上我有一个有效的示例here -
当您创建扩展
AbstractCassandraConfiguration
的bean时,现在这是您的工作,以显式实现所需的值,因此请在类中添加。另外,您还需要ro提供明确的注释@EnableCassandraRepositories
@Value("${spring.data.cassandra.schema-action}")
private String schemaAction;
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.valueOf(schemaAction);
}
最重要的是,我建议您不要使用它。 Spring Data就像是一种魅力,但这里是我的担忧:
-
创建表不仅是与数据模型匹配的问题。的确,基于您的用例或TTL或任何元数据的压缩策略又如何呢?
-
我们假设您知道如何使用“分区键”和“聚类”列正确构建主键,但是如果您需要在2个表中存储完全相同的对象,那将有两个不同的查询,该怎么办。 (请记住:我需要在应用程序中的任何地方允许过滤=>您的数据模型可能是错误的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。