【问题标题】:How to use flyway with gradle? First migration depends on gradle build如何在gradle中使用flyway?第一次迁移取决于 gradle build
【发布时间】:2014-12-29 12:12:04
【问题描述】:

我正在使用 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?

【问题讨论】:

    标签: gradle flyway build.gradle


    【解决方案1】:

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

    在这种情况下,您将创建一个 V1 迁移来设置所有现有的生产表。这允许您使用 flyway 从头开始​​设置新的数据库。

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

    因此,在您的第一个表未创建的情况下,您实际所做的是

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 2017-08-16
      • 2020-01-20
      • 2016-06-08
      • 2013-12-23
      • 2013-08-10
      • 2015-02-25
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多