Migration Flyway-放置数据库,创建数据库

Migration Flyway-放置数据库,创建数据库,migration,flyway,Migration,Flyway,我有两个文件:db结构和db数据sql文件。 (我们还没有参与到创建alter文件的项目中) 如果使用maven更改了这些文件,是否有办法在每次构建之前运行它们 我唯一的想法是在每次更改文件后重命名文件(将版本调高),确保flyaway会将其选中 有没有更聪明的方法,比如使用API或其他一些“技巧” 谢谢 --MB您可以使用flyway migrate进行以下配置 validationMode=ALL validationErrorMode=CLEAN 对于每个sql迁移,在执行sql脚本时计

我有两个文件:db结构和db数据sql文件。 (我们还没有参与到创建alter文件的项目中)

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

我唯一的想法是在每次更改文件后重命名文件(将版本调高),确保flyaway会将其选中

有没有更聪明的方法,比如使用API或其他一些“技巧”

谢谢


--MB

您可以使用flyway migrate进行以下配置

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

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


此配置可以从API使用,或者。

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

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

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

在这种情况下,不需要initOnMigrate。这仅适用于现有数据库。是的,如果架构不是空的,则需要此选项。它实际上会强制创建一个版本表(无论如何)。我想这有点冒险,但这是您通常希望用于ITs的。正如问题所述,db应该在更改后进行清理和重新混合。如果它被清理了,就不需要调用init。这并不能解释为什么需要“如果其中任何一个发生了变化”。无论如何,该设置会使清理更加激进,这取决于您的需要。validationErrorMode不推荐使用。请改用cleanOnValidationError。