我正在尝试使用Flyway(和Hikari池)制作Spring Boot应用程序以启动服务器,即使当时数据库不可用。
在以下情况下,我需要支持案件: 1.应用程序启动时,数据库不可用(数据库启动后应运行Flyway,最多可能需要30分钟)。 2.数据库在应用程序生存期内脱机,然后又备份。
我遇到第一种情况的问题,即使数据库不可用且应用程序停止,Flyway仍会尝试进行迁移。
我尝试添加spring.datasource.continue-on-error: true
,但Flyway忽略了这一点,并且我找不到任何允许这种操作的飞行路线配置。
有可能还是我应该自己包装Flyway?
Spring Boot 2.1.4
答案 0 :(得分:0)
需要考虑的几点 当Java应用程序实例确实没有数据库时,应用程序的期望行为是什么?好的,flyway不会启动,但是应用程序将如何处理必须到达数据库的请求? Flyway本身依赖于DataSource bean,如果使用它,则可能依赖于休眠,而这些基础设施比flyway本身要复杂得多?
也许如果数据库不可用,则根本不需要启动应用程序? 相反,值得依靠协调器(如kubernetes,ECS或任何会识别应用程序未启动并尝试再次,重新触发启动直到数据库准备就绪的事物)的东西?
这是我的一般建议。
现在,假设找到所有这些问题的答案,并且仍然希望继续执行以下操作:
在进行飞车集成时,Spring Boot本身的工作方式如下:
如果相关类(Flyway类)存在于类路径和spring.flyway.enabled=true
上,则flyway的bean启动,并且spring boot发挥了魔力。
从技术上讲,相关的自动配置可以在类org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
中找到(org.springframework.boot:spring-boot-autoconfigure模块)
我认为要走的路是禁用飞行通道,考虑到像DataSource这样的bean可用(以某种方式)的事实-自己创建一个Flyway Bean,并在后台以某种循环触发迁移,这种迁移只会退出迁移是否成功(或已经应用)