【问题标题】:Flyway - drop db, create dbFlyway - 删除数据库,创建数据库
【发布时间】:2011-10-02 18:23:00
【问题描述】:

我有 2 个文件:db 结构和 db 数据 sql 文件。 (我们尚未参与创建变更文件的项目)。

如果使用 maven 更改了这些文件,是否有办法在每次构建之前运行这些文件?

我唯一的想法是在每次更改文件后重命名文件(提高版本),以确保 flyaway 将其拾取。

有没有更聪明的方法,也许是使用 API 或其他一些“技巧”?

谢谢

--MB

【问题讨论】:

    标签: migration flyway


    【解决方案1】:

    您可以通过以下配置使用flyway migrate

    validationMode=ALL
    validationErrorMode=CLEAN
    

    对于每个 sql 迁移,在执行 sql 脚本时都会计算一个 CRC32 校验和。验证机制检查类路径中的 sql 迁移是否仍然与数据库中已执行的 sql 迁移具有相同的校验和。

    validationErrorMode=CLEAN 专门用于方便开发。即使很难,我们也强烈建议在将迁移脚本签入 SCM 并运行后不要更改它们,这提供了一种以平稳方式处理这种情况的方法。数据库将被自动擦除干净,确保下一次迁移将使您回到签入 SCM 的状态。

    此配置可通过 API、maven plugincommand line 使用。

    【讨论】:

    【解决方案2】:

    使用较新的 Flyway,您可以使用

    flyway.setInitOnMigrate(true);
    flyway.setCleanOnValidationError(true);
    flyway.setValidateOnMigrate(true);
    

    如果文件的校验和更改或版本表丢失,则删除所有内容。

    【讨论】:

    • 在这种情况下不需要 initOnMigrate。这仅适用于现有数据库。
    • 是的,如果架构不为空,则需要。它实际上会强制创建一个版本表(无论如何)。我想这有点冒险,但它是您通常想要用于 IT 的。
    • 正如问题所说,更改后应清理并重新迁移数据库。如果它被清理了,不需要调用 init。
    • 这不能解释为什么你需要“如果有任何改变”。无论如何,该设置使清理更加积极,这取决于您的需要,这是必需的还是不需要的。
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 2013-11-16
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多