我一直在使用 Flyway 来处理我的 sql 脚本迁移,并且对此非常满意。然而,当我决定继续使用 Spring Boot 和 Flyway 时,当我尝试从应用程序运行不同的 Flyway 命令时,我陷入了困境。
当我运行我的 fat jar 应用程序时,migrate
Flyway 命令会自动执行。一切都很顺利,直到其中一个脚本在 Linux 中失败(因为区分大小写)。因此,当我想执行 repair
命令时,我无法执行此操作,因此我必须手动删除 schema_version
表中的条目。
所以,我的问题是,是否有可能通过应用程序执行其他 Flyway 命令,而无需创建自定义 Flyway 处理程序,而只需使用其 native 集成。
我没有找到任何 command
的 Spring Boot 属性或类似的内容。
有什么帮助吗?
最佳答案
Flyway 集成没有 command
属性。如果您愿意,您可以实现自己的 FlywayMigrationStrategy
,这是一个单一方法接口(interface):
public interface FlywayMigrationStrategy {
/**
* Trigger flyway migration.
* @param flyway the flyway instance
*/
void migrate(Flyway flyway);
}
例如,您可以选择传递的命令行参数并进行修复
而不是迁移
:
void migrate(Flyway flyway) {
String command = env.getProperty("flyway.commamd", "migrate");
switch (command) {
case "migrate":
flyway.migrate();
break;
case "repair":
flyway.repair();
break;
default:
throw new IllegalArgumentException("Invalid command: " + command);
}
}
查看文档 here .
关于java - 如何在 Spring Boot 应用程序中运行 Flyway 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39396580/