【发布时间】:2020-12-07 08:07:06
【问题描述】:
我已经实现了一个 Spring Boot oAuth 应用程序,它在 Tomcat 服务器上运行并使用 Cassandra 作为数据库。当数据库服务器启动并运行时,应用程序被部署并运行良好。当数据库关闭时会出现问题,因此我的 oAuth 应用程序也拒绝部署。应用程序部署在生产中的不同服务器上,因此当我的容器重新启动时,我们无法保证服务器重新启动的顺序。
我已经尝试了许多可用的解决方案,例如
//@EnableCassandraRepositories("<My Package>")
@EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class})
在@SpringBootApplication 类中也使用类似的方法。但没有任何帮助。
我猜真正的问题是我们正在使用 Cassandra/Spring 的默认实现,其中我们必须使用存储库。当应用程序被部署时,@Bean/@Autowired 注释失败并且我的应用程序。
- 我们考虑的实现可以如下:无论 Cassandra 是关闭还是启动,oAuth 应用程序都应该运行。
- 如果数据库服务器已关闭,当第一个请求到达 OAuth 时,它应该建立连接,返回一个新的会话对象并为后续请求重用相同的会话对象。
非常感谢任何帮助。提前谢谢你。
【问题讨论】:
-
如果第一个请求进来但仍然没有启动和运行的数据库怎么办?您可以使 bean 变得懒惰(在创建点和注入点上)。
-
如果请求来了并且数据库关闭了,我们可以返回失败响应,但是如果会话对象为空,它应该检查下一个请求,当数据库启动时应该自动连接。这是我们需要的关键改变。
-
哪个版本的 Spring Boot? Cassandra 驱动程序 4.x 具有继续重新连接直到成功的选项。
-
我正在使用 oAuth 2.0 和 Cassandra 3.0 系列库。我认为这不是 Cassandra 尝试重新连接,而是我们想要的是 Spring boot 应该部署我的应用程序,即使 Cassandra DB 已关闭。
标签: java spring-boot oauth-2.0 spring-data-cassandra