gpt4 book ai didi

java - Flyway、Spring Boot和应用程序启动无需数据库

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:17 26 4
gpt4 key购买 nike

我正在尝试使用 Flyway(和 Hikari 池)制作 Spring Boot 应用程序来启动服务器,即使当时数据库不可用。

在以下情况下我需要支持案例:1. 应用程序启动时DB不可用(DB启动后应运行Flyway,最多可能需要30分钟)。2. DB在应用程序生命周期内离线然后恢复。

我在第一种情况下遇到了问题,即使数据库不可用并且应用程序停止,Flyway 也总是尝试进行迁移。我尝试添加 spring.datasource.continue-on-error: true 但 Flyway 忽略了这一点,并且我找不到任何允许此类操作的 Flyway 配置。

是否有可能或者我应该包装 Flyway 并自己做?

Spring 启动2.1.4

最佳答案

需要考虑的几点当Java应用程序实例的数据库确实不可用时,应用程序期望的行为是什么?好的,flyway 不会启动,但是应用程序如何处理必须到达数据库的请求?Flyway本身依赖于DataSource bean,如果你使用它的话可能依赖于hibernate,而这些基础设施比flyway本身复杂得多?

也许如果数据库不可用,应用程序根本不需要启动?相反,值得依赖协调器(例如 kubernetes、ECS 或任何能够识别应用程序未启动并会尝试一次又一次重新触发启动,直到数据库准备就绪的工具)?

这是我的总体建议。

现在,假设找到所有这些问题的答案,并且仍然想继续走这条路:

Spring Boot 本身在 Flyway 集成方面的工作原理如下:

如果类路径中存在相关类(Flyway 类)并且 spring.flyway.enabled=true,则 Flyway 的 bean 启动,Spring Boot 发挥其魔力。

从技术上讲,相关的自动配置可以在类org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration(org.springframework.boot:spring-boot-autoconfigure模块)中找到

我认为要采取的方法是禁用 Flyway,并且考虑到像 DataSource 这样的 Bean 是可用的(以某种方式) - 自己创建一个 Flyway Bean 并在后台以某种循环触发迁移,只有当迁移实际成功(或已经应用)时才会退出

关于java - Flyway、Spring Boot和应用程序启动无需数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56702629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com