Skip to content

Add support for customized Cassandra keyspace creations #15821

@rreimann

Description

@rreimann

Using the Cluster bean from CassandraAutoConfiguration makes it quite difficult to provide a custom keyspace creation (e.g. via CreateKeyspaceSpecification).

While CassandraClusterFactoryBean#setKeyspaceCreations provides support for custom keyspace creations I couldn't find anything similar when the cluster is created via the auto-configuration.

Trying to find a workaround that doesn't duplicate existing auto-configuration code led to this ugly custom configuration...

@Configuration
@Import(CassandraDataAutoConfiguration.class)
@EnableConfigurationProperties(CassandraProperties.class)
public class CassandraCustomConfiguration {

    @Bean
    Cluster cluster(CassandraProperties properties, ObjectProvider<ClusterBuilderCustomizer> builderCustomizers) {
        CassandraAutoConfiguration cassandraAutoConfiguration = new CassandraAutoConfiguration(properties, builderCustomizers);
        Cluster cluster = cassandraAutoConfiguration.cassandraCluster();
        createKeyspace(cluster, getSimpleKeyspaceCreation());
        return cluster;
    }

    private CreateKeyspaceSpecification getSimpleKeyspaceCreation() {
        return CreateKeyspaceSpecification.createKeyspace("foo").ifNotExists(); // simplified sample
    }

    private void createKeyspace(Cluster cluster, CreateKeyspaceSpecification keyspaceCreation) {
        try (Session session = cluster.connect()) {
            CqlTemplate template = new CqlTemplate(session);
            template.execute(CreateKeyspaceCqlGenerator.toCql(keyspaceCreation));
        }
    }
}

It would be nice if the auto-configuration would provide support for keyspace creations.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions