如何解决Spring Reactive Cassandra,使用自定义CqlSession
我们如何在Spring Webflux应用程序上结合Spring Starter反应式Cassandra使用自定义CqlSession?
我目前正在执行以下操作,效果很好:
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();
我们如何告诉此配置使用它?
谢谢
解决方法
选项1:
如果您希望完全覆盖自动配置的CqlSession
bean,可以通过提供自己的CqlSesson
bean即
@Bean
public CqlSession cassandraSession() {
return CqlSession.builder().withClientId(MyClientId).build();
}
覆盖整个bean的缺点是您将失去通过应用程序属性配置此会话的能力,并且将失去spring boot随附的默认设置。
选项2:
如果您想保留Spring Boot提供的默认值,并且能够通过应用程序属性配置会话,则可以使用CqlSessionBuilderCustomizer
向CqlSession
提供特定的自定义配置。这可以通过定义该类型的bean来实现,即:
@Bean
public CqlSessionBuilderCustomizer myCustomiser() {
return cqlSessionBuilder -> cqlSessionBuilder.withClientId(MyClientId);;
}
我个人的偏爱是选项2,因为它保留了spring boot所提供的功能,在我看来,随着时间的推移,该应用程序更易于维护。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。