java - 如何在 Spring Boot 应用程序中运行 Flyway 命令?

标签 java spring spring-boot flyway

我一直在使用 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/

相关文章:

java - Spring Boot 和 MySQL 的连接已关闭

java - 创建文件导致问题,File.getPath() 似乎不起作用

java - 如何访问 thymeleaf block 中的对象?

java - 如何将任何对象序列化为 URI?

spring-boot - Vue js CLI 3 无法使用 Thymeleaf 语法​​构建

java - 测试 spring security oauth2login 启用的应用程序抛出 IllegalArgumentException : clientRegistrationRepository cannot be null

spring-boot - 扩展 GitInfoContributor 以添加属性?

java - Spring 3.0 无法在运行时获取自定义Annotation

java - 应用程序只有在我手动进入时才能工作;否则异常

java - 静态资源(图片)Tomcat或Nginx服务器