延迟SpringBoot应用程序启动,直到数据库启动

问题描述

我有一个SpringBoot应用程序,当它使用的数据库未启动时,它将无法启动,因为数据源bean将无法初始化。我希望我的应用程序在数据库启动之前不启动,以免发生此故障。

要提到的是,此应用程序正在Kubernetes中运行,因此一种选择是使用init容器。我希望在应用程序内部拥有这种逻辑。

首先,这是一个坏主意,我应该坚持使用init容器?

如果这不是一个坏主意,通常最好的方法是什么。我正在查看Spring Retry,一种可能的解决方案似乎是@Bean数据源初始化方法中具有重试逻辑。那有什么缺点吗?有更好的方法吗?

解决方法

不确定是否适合您,但是如果您声明了数据源bean。

您可以@Lazy注释以将Bean初始化推迟到需要时。

您的应用程序启动不应在启动时失败,因为在需要之前不会初始化Datasource bean

,

您可以使用启动探针从一开始就检查数据库连接。如果要为健康状况而不断地池连接数据库,则可以使用其他probles。在检查构建单元测试阶段之后,或者在用于部署的管道中,您可以添加一个步骤来检查所使用的外部服务/数据库的连接。