我正在使用gradle,现在将flyway添加到我的项目中。我有第一次迁移的问题 - V1__xxx.sql。有时它正在执行,有时它不是。
我有3个迁移文件:
我做了4个测试用例试图了解正在发生的事情。
在我做的每一个之前:
gradle clean flywayclean
测试用例1.创建表:person2,person3
gradle flywayinit flywaymigrate
测试用例2.创建表:person1,person2,person3
gradle flywaymigrate
测试用例3.创建表:person1,person2,person3
gradle build flywaymigrate
测试用例4.创建表:person2,person3
gradle build flywayinit flywaymigrate
我期待所有三个表:person1,person2和person3每次都会被创建。但他们没有
我没有任何失败日志或警告。但有时候第一个表不会被创建。我想问你:
答案 0 :(得分:2)
flywayinit
用于将flyway添加到已有包含数据的表的现有生产数据库中。
在该场景中,您将创建一个V1迁移,用于设置所有现有生产表。这允许您使用flyway从头开始设置新数据库。
但是,您显然不希望针对生产运行V1迁移,因为这些表已经存在且其中包含生产数据。因此,您针对生产数据库运行flywayinit
并创建一个元数据表,就好像V1已经运行但实际上并未运行。现在,您可以在将来使用flyway升级生产数据库。
因此,在没有创建第一个表的情况下,您实际执行的是
TL; DR:不要在空数据库上使用flywayinit