Spring 响应式 Cassandra,使用自定义 CqlSession
Spring Reactive Cassandra, use custom CqlSession
请问我们如何在 Spring Webflux 应用程序上使用自定义 CqlSession 并结合 Spring starter reactive 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();
我们如何告诉这个配置使用它?
谢谢
选项 1:
如果您希望完全覆盖自动配置的 CqlSession
bean,您可以通过提供自己的 CqlSesson
bean 来实现,即
@Bean
public CqlSession cassandraSession() {
return CqlSession.builder().withClientId(MyClientId).build();
}
覆盖整个 bean 的缺点是您将失去通过应用程序属性配置此会话的能力,并且您将失去 spring 引导附带的默认值。
选项 2:
如果您想保留 spring 引导提供的默认值并能够通过应用程序属性配置会话,您可以使用 CqlSessionBuilderCustomizer
为 [=12] 提供特定的自定义配置=].这可以通过定义该类型的 bean 来实现,即:
@Bean
public CqlSessionBuilderCustomizer myCustomiser() {
return cqlSessionBuilder -> cqlSessionBuilder.withClientId(MyClientId);;
}
我个人的偏好是选项 2,因为它保留了 spring 启动提供的功能,在我看来,随着时间的推移,这会更容易维护应用程序。
请问我们如何在 Spring Webflux 应用程序上使用自定义 CqlSession 并结合 Spring starter reactive 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();
我们如何告诉这个配置使用它?
谢谢
选项 1:
如果您希望完全覆盖自动配置的 CqlSession
bean,您可以通过提供自己的 CqlSesson
bean 来实现,即
@Bean
public CqlSession cassandraSession() {
return CqlSession.builder().withClientId(MyClientId).build();
}
覆盖整个 bean 的缺点是您将失去通过应用程序属性配置此会话的能力,并且您将失去 spring 引导附带的默认值。
选项 2:
如果您想保留 spring 引导提供的默认值并能够通过应用程序属性配置会话,您可以使用 CqlSessionBuilderCustomizer
为 [=12] 提供特定的自定义配置=].这可以通过定义该类型的 bean 来实现,即:
@Bean
public CqlSessionBuilderCustomizer myCustomiser() {
return cqlSessionBuilder -> cqlSessionBuilder.withClientId(MyClientId);;
}
我个人的偏好是选项 2,因为它保留了 spring 启动提供的功能,在我看来,随着时间的推移,这会更容易维护应用程序。