微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring-Data-Cassandra SchemaAction不起作用

如何解决Spring-Data-Cassandra SchemaAction不起作用

我正在尝试通过扩展CassandraAutoConfiguration

在我的应用程序中配置Cassandra

我正在使用弹簧CassandraRepository进行数据库访问,并使用带有o.s.d.cassandra.core.mapping.Table批注的类来定义我的表。

我还配置了以下属性以及集群所需的其他属性

spring: 
  data:
   cassandra:
     schema-action: CREATE_IF_NOT_EXISTS

但是在应用程序启动时,Cassandra中没有创建表。 schemaAction中的CassandraProperties无法正常工作。

如果我使用ApplicationRunnercassandratemplate.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 举报,一经查实,本站将立刻删除。