我有一个使用 Spring Data for Cassandra 的 Spring Boot 应用程序。要求之一是即使 Cassandra 集群不可用,应用程序也能启动。应用程序记录情况,其所有端点将无法正常工作,但应用程序不会关闭。它应该在此期间重试连接到集群。当集群可用时,应用程序应该开始正常运行。 如果我能够在应用程序启动期间进行连接,并且此后集群变得不可用,则 cassandra java 驱动程序能够管理重试。 如何在应用程序启动期间管理重试并仍然使用 Spring Data 中的 Cassandra 存储库?
谢谢
最佳答案
如果 Apache Cassandra 不可用,则可以启动 Spring Boot 应用程序,但您需要定义 Session
和CassandraTemplate
自己用 bean @Lazy
。这些 bean 开箱即用 CassandraAutoConfiguration
但会急切地初始化(默认行为),这会创建 Session
。 Session
需要连接到 Cassandra,如果未延迟初始化,这将阻止启动。
以下代码将延迟初始化资源:
@Configuration
public class MyCassandraConfiguration {
@Bean
@Lazy
public CassandraTemplate cassandraTemplate(@Lazy Session session, CassandraConverter converter) throws Exception {
return new CassandraTemplate(session, converter);
}
@Bean
@Lazy
public Session session(CassandraConverter converter, Cluster cluster,
CassandraProperties cassandraProperties) throws Exception {
CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
session.setCluster(cluster);
session.setConverter(converter);
session.setKeyspaceName(cassandraProperties.getKeyspaceName());
session.setSchemaAction(SchemaAction.NONE);
return session.getObject();
}
}
关于Cassandra 集群恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800523/