我有一个使用Spring Data for Cassandra的Spring Boot应用程序。其中一个要求是即使Cassandra Cluster不可用,应用程序也会启动。应用程序记录该情况,其所有端点将无法正常工作,但应用程序不会关闭。在此期间,它应该重试连接到群集。当群集可用时,应用程序应该开始正常运行。 如果我能够在应用程序启动期间连接并且群集在此之后变得不可用,则cassandra java驱动程序能够管理重试。 如何在应用程序启动期间管理重试并仍使用Spring Data中的Cassandra存储库?
感谢名单
答案 0 :(得分:1)
如果Apache Cassandra不可用,则可以启动Spring Boot应用程序,但您需要使用hashmap
自行定义Session
和CassandraTemplate
bean。这些bean是@Lazy
开箱即用的,但是会急切地初始化(默认行为),这会创建CassandraAutoConfiguration
。 Session
需要连接到Cassandra,如果它没有被懒惰地初始化,它将阻止启动。
以下代码将懒惰地初始化资源:
Session
答案 1 :(得分:0)
其中一个要求是即使Cassandra群集不可用,应用程序也会启动
我认为您应该从Java驱动程序doc:http://datastax.github.io/java-driver/manual/#cluster-initialization
中读取此会话除非执行某些调用,否则Cluster
对象不会自动连接。
因为您正在使用Spring Data Cassandra(我不推荐,因为它的功能少于Java驱动程序的普通Mapper模块...)我不知道Cluster
对象或{ {1}}对象直接暴露给用户......
对于重试,您可以将Session
调用放在try / catch块中,如果群集仍然无法使用,您将根据文档捕获cluster.init()
。在例外情况下,您可以安排稍后重试NoHostAvailableException