首页 > 解决方案 > Spring Reactive Cassandra,使用自定义 CqlSession

问题描述

我们如何在 Spring Webflux 应用程序上使用自定义 CqlSession 并结合 Spring starter 反应式 Cassandra?

我目前正在执行以下操作,效果很好:

public class BaseCassandraConfiguration extends AbstractReactiveCassandraConfiguration {



    @Bean
    @NonNull
    @Override
    public CqlSessionFactoryBean cassandraSession() {
        final CqlSessionFactoryBean cqlSessionFactoryBean = new CqlSessionFactoryBean();
        cqlSessionFactoryBean.setContactPoints(contactPoints);
        cqlSessionFactoryBean.setKeyspaceName(keyspace);
        cqlSessionFactoryBean.setLocalDatacenter(datacenter);
        cqlSessionFactoryBean.setPort(port);
        cqlSessionFactoryBean.setUsername(username);
        cqlSessionFactoryBean.setPassword(passPhrase);
        return cqlSessionFactoryBean;
    }

但是,我想使用自定义会话,例如:

        CqlSession session = CqlSession.builder().build();

我们如何告诉这个配置使用它?

谢谢

标签: cassandraspring-webfluxspring-data-cassandra

解决方案


选项1:

如果您希望完全覆盖自动配置的CqlSessionbean,您可以通过提供自己的CqlSessonbean 来实现,即。

@Bean
public CqlSession cassandraSession() {
    return CqlSession.builder().withClientId(MyClientId).build();
}

覆盖整个 bean 的缺点是您将失去通过应用程序属性配置此会话的能力,并且您将失去 Spring Boot 附带的默认设置。

选项 2:

如果您想保留 Spring Boot 提供的默认值并能够通过应用程序属性配置会话,您可以使用CqlSessionBuilderCustomizerCqlSession. 这可以通过定义该类型的 bean 来实现,即:

@Bean
public CqlSessionBuilderCustomizer myCustomiser() {
    return cqlSessionBuilder -> cqlSessionBuilder.withClientId(MyClientId);;
}

我个人的偏好是选项 2,因为它保留了 spring boot 提供的功能,我认为随着时间的推移更容易维护应用程序。


推荐阅读