Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 延迟SpringBoot应用程序启动,直到db启动_Java_Spring_Spring Boot_Kubernetes_Spring Retry - Fatal编程技术网

Java 延迟SpringBoot应用程序启动,直到db启动

Java 延迟SpringBoot应用程序启动,直到db启动,java,spring,spring-boot,kubernetes,spring-retry,Java,Spring,Spring Boot,Kubernetes,Spring Retry,我有一个SpringBoot应用程序,当它使用的数据库没有启动时,它将无法启动,因为DataSourceBean将无法初始化。我希望我的应用程序在数据库启动之前不要启动,以避免此故障 提到这个应用程序正在Kubernetes中运行,所以一个选项是使用init容器。不过,我希望在应用程序本身中具有这种逻辑 首先,这是一个坏主意,我应该坚持使用init容器吗 如果这不是一个坏主意,那么通常最好的方法是什么。我正在研究SpringRetry,一个可能的解决方案似乎是在@BeanDataSource初始

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

提到这个应用程序正在Kubernetes中运行,所以一个选项是使用init容器。不过,我希望在应用程序本身中具有这种逻辑

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


如果这不是一个坏主意,那么通常最好的方法是什么。我正在研究SpringRetry,一个可能的解决方案似乎是在@BeanDataSource初始化方法中使用重试逻辑。这有什么可能的缺点吗?有更好的方法吗?

不确定这是否适用于您,但以防您声明了数据源bean

您可以使用注释将bean初始化延迟到需要时


应用程序启动不应该在启动时失败,因为数据源bean在需要时才会初始化

您可以在启动时使用启动探测来检查数据库连接。如果您希望数据库连接不断地被共用以保持健康,那么可以使用其他连接。或者在您用来部署的管道中,在检查构建单元测试阶段之后,您可以添加一个步骤来检查您使用的外部服务/db的连接。

请检查此链接,可能我遗漏了一些内容,但似乎需要创建数据源对象才能正常工作。我的问题是,我的数据源bean在创建时失败,因为它需要连接到数据库。这是一个不错的建议。但是如果应用程序在db准备好之前启动并收到请求,那么我仍然会得到一个错误。也许可以改变应用程序逻辑,在db启动之前不初始化数据源bean。虽然这句话似乎有点夸张