【问题标题】:Spring Boot application should start even though Cassandra database is down即使 Cassandra 数据库已关闭,Spring Boot 应用程序也应该启动
【发布时间】: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


【解决方案1】:

你可以设置

spring.datasource.continue-on-error=true

在 application.properties 文件中。

【讨论】:

  • 我添加了该属性但没有帮助。我什至从 org.springframework.context.annotation.Lazy 类中添加了@Lazy;在我的 Cassandra 配置类上。但是当 Cassandra DB 在启动期间关闭时,应用程序仍然失败。
猜你喜欢
  • 2021-11-19
  • 2015-10-22
  • 1970-01-01
  • 2017-01-14
  • 2017-04-21
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多