如何使用gradle飞路?首次迁移取决于gradle构建

时间:2014-11-02 20:32:14

标签: gradle flyway build.gradle

我正在使用gradle,现在将flyway添加到我的项目中。我有第一次迁移的问题 - V1__xxx.sql。有时它正在执行,有时它不是。

鉴于

我有3个迁移文件:

  • V1__create.sql - 创建person1表
  • V2__create_db.sql - 创建person2表
  • V3__Create_person_table.sql - 创建person3表

我做了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每次都会被创建。但他们没有

问题

我没有任何失败日志或警告。但有时候第一个表不会被创建。我想问你:

  1. 为什么这样做?为什么有时第一个sql被执行,有时它不是?我错过了什么?
  2. 我应该如何正确使用gradle clean / build和gradle flywayclean / init / migrate?

1 个答案:

答案 0 :(得分:2)

flywayinit用于将flyway添加到已有包含数据的表的现有生产数据库中。

在该场景中,您将创建一个V1迁移,用于设置所有现有生产表。这允许您使用flyway从头开始设置新数据库。

但是,您显然不希望针对生产运行V1迁移,因为这些表已经存在且其中包含生产数据。因此,您针对生产数据库运行flywayinit并创建一个元数据表,就好像V1已经运行但实际上并未运行。现在,您可以在将来使用flyway升级生产数据库。

因此,在没有创建第一个表的情况下,您实际执行的是

  • 清空你的数据库(flywayclean)
  • 告诉flyway假装V1已经在此DB(flywayinit)中运行
  • 将您的数据库迁移到V3(flywaymigrate)

TL; DR:不要在空数据库上使用flywayinit