Skip to content

Add support for customized Cassandra keyspace creations #15821

Open
@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

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions