这是我的应用工作流程。我有一个在jetty / tomcat中运行的springboot应用程序。该应用程序与MySql / MariaDB的flyway数据库迁移功能集成在一起。
在许多情况下,使用docker-compose(我们想要的副本号实例)在服务器上部署应用程序。
问题是我的应用程序使用Flyway,当Docker启动我的两个服务时,它们在启动速度方面几乎相同,因此它们都尝试将相同的迁移脚本应用于数据库,并且更快成功并且另一个失败(因为它试图在表schema_version中插入与另一个相同的行)。
此类问题的最佳解决方案是什么?
错误记录:
app_webapp.2.5kv8hnbu5myt@sophea-linux |在org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) app_webapp.2.5kv8hnbu5myt@sophea-linux |引起:org.flywaydb.core.api.FlywayException:验证失败。迁移校验和不匹配迁移1519209964095 app_webapp.2.5kv8hnbu5myt@sophea-linux | - >适用于数据库:90265964 app_webapp.2.5kv8hnbu5myt@sophea-linux | - >本地决议:522480574 app_webapp.2.5kv8hnbu5myt@sophea-linux |在org.flywaydb.core.Flyway.doValidate(Flyway.java:11
答案 0 :(得分:1)
这是因为迁移在应用后已被修改。其中一个原因可能是,如果数据库是从Windows主机迁移的,并且行结尾是作为使用自动CRLF的Git提交的一部分而更改的。这一特定原因已在较新版本的Flyway中得到解决。