如何使用弹簧数据cassandara创建表?

Che*_*rry 6 java spring cassandra spring-data-cassandra

我创建了自己的存储库:

public interface MyRepository extends TypedIdCassandraRepository<MyEntity, String> {
}
Run Code Online (Sandbox Code Playgroud)

那么问题是如何自动创建cassandra表呢?目前Spring注入MyRepository试图将实体插入到不存在的表中.

那么有没有办法在spring容器启动期间创建cassandra表(如果它们不存在)?

PS如果只有config boolean属性而不添加xml行并创建类似BeanFactory等的东西,那将是非常好的 :-)

abb*_*bas 10

您可以在application.properties 中使用此配置

spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS
Run Code Online (Sandbox Code Playgroud)


rob*_*ock 8

覆盖AbstractCassandraConfiguration类上的getSchemaAction属性

@Configuration
@EnableCassandraRepositories(basePackages = "com.example")
public class TestConfig extends AbstractCassandraConfiguration {

    @Override
    public String getKeyspaceName() {
        return "test_config";
    }

    @Override
    public SchemaAction getSchemaAction() {
        return SchemaAction.RECREATE_DROP_UNUSED;
    }

    @Bean
    public CassandraOperations cassandraOperations() throws Exception {
        return new CassandraTemplate(session().getObject());
    }

}
Run Code Online (Sandbox Code Playgroud)


mag*_*382 5

您还需要覆盖 AbstractCassandraConfiguration 实现中的 getEntityBasePackages()方法。这将允许 Spring 找到您使用 @Table 注释的任何类,并创建表。

@Override
public String[] getEntityBasePackages() {
    return new String[]{"com.example"};
}
Run Code Online (Sandbox Code Playgroud)