当我启动应用程序以及迁移数据库时,我使用了Flyway的migrate。默认情况下,validateOnMigrate
已启用,如果已应用的文件已更改,则validate会报告错误。
到目前为止一直很好,但它似乎忽略了已经应用的文件丢失的情况。
其次,如果架构包含的迁移比最新版本更新,则迁移会记录警告,但也不会失败,例如:
架构
xxx
的版本(1.1.1)比最新版本更新 可用的迁移(1.0.1)!
有没有办法防止这种行为?我希望有failIfMigrationIsMissing
和failIfSchemaIsNewer
等选项。
所有这些对于确保没有人在较新的数据库之上安装或启动旧版本是有用的,例如降级。实际上我认为这是默认行为,或者我在这里错过了什么?
答案 0 :(得分:0)
这是一个适用于flyway 4.0.3的方案。如果您的版本控制更复杂,您可以检查所有迁移。
flyway.migrate();
MigrationInfoService migrationInfoService = flyway.info();
MigrationInfo[] applied = migrationInfoService.applied();
MigrationInfo last = applied[applied.length - 1];
if (MigrationState.FUTURE_SUCCESS.equals(last.getState())) {
throw new Exception("Database downgrade detected.");
}