【问题标题】:Failed to ugrade a Spring Boot app to Flyway 7.0.0无法将 Spring Boot 应用升级到 Flyway 7.0.0
【发布时间】:2021-01-18 05:59:44
【问题描述】:

我正在尝试升级我的 Spring Boot 2.3.4 应用以使用 Flyway 7.0.0(最新版本)。以前它使用的是 Flyway 6.5.6。 build.gradle中的相关条目如下所示。

buildscript {
  ext {
    flywayVersion = "7.0.0" // changed from 6.5.6
  }
}

plugins {
  id "org.flywaydb.flyway" version "${flywayVersion}"
}

dependencies {
  implementation "org.flywaydb:flyway-core:${flywayVersion}"
}

flyway {
  url = "jdbc:postgresql://0.0.0.0:5432/postgres"
  user = "postgres"
  password = "secret"
}

当我启动应用程序时出现以下错误,例如./gradlew bootRun


应用程序启动失败


说明:

试图调用一个不存在的方法。尝试 是从以下位置制作的:

org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:65)

以下方法不存在:

'int org.flywaydb.core.Flyway.migrate()'

该方法的类 org.flywaydb.core.Flyway 可从 以下地点:

jar:file:/Users/antonio/.gradle/caches/modules-2/files-2.1/org.flywaydb/flyway-core/7.0.0/623494c303c62080ca1bc5886098ee65d1a5528a/flyway-core-7.0.0.jar!/org/flywaydb/core/Flyway.class

类层次结构是从以下位置加载的:

org.flywaydb.core.Flyway: file:/Users/antonio/.gradle/caches/modules-2/files-2.1/org.flywaydb/flyway-core/7.0.0/623494c303c62080ca1bc5886098ee65d1a5528a/flyway-core-7.0.0.jar

行动:

更正应用程序的类路径,使其包含 org.flywaydb.core.Flyway 的单一兼容版本

【问题讨论】:

  • 请提供github代码库来检查问题。
  • 可以通过github提供你的项目吗?
  • @AnishB。我不能
  • 在 Flyway 7 中,我们对 api 进行了重大更改,其中之一是更改 migrate() 以返回有关已迁移内容的信息,而不仅仅是一个 int。因此,在发布针对此新版本编译的新版本 springboot 之前,它不会与 spring boot 兼容。我建议在 spring boot github github.com/spring-projects/spring-boot/issues 上提出问题

标签: java spring-boot flyway


【解决方案1】:

基本上,请参阅 Philip 对您的问题的评论。

Flyway 7.x.x 目前与 Spring Boot 2.3.4 不兼容

临时解决方案是直接降级到 Flyway 6.5.7(最后一个 6.x.x 版本),直到 Spring Boot 2.3.5 发布。

阅读更多内容并在此处关注问题:https://github.com/spring-projects/spring-boot/issues/23514

支持 Flyway 的新配置选项:https://github.com/spring-projects/spring-boot/issues/23579

【讨论】:

    【解决方案2】:

    降级到 Flyway 6.5.7 有效。

    【讨论】:

      【解决方案3】:

      在 Flyway 7 中,migrate 的签名发生了变化。

      要让 Flyway 7.x.x 与 Spring Boot 2.3.x 一起使用,您可以提供自定义 FlywayMigrationStrategy 实现,它调用正确的 migrate 方法。

      import org.flywaydb.core.Flyway;
      import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
      import org.springframework.stereotype.Component;
      
      @Component
      public class FlywayMigrationStrategyImpl implements FlywayMigrationStrategy {
          @Override
          public void migrate(Flyway flyway) {
              flyway.migrate();
          }
      }
      
      猜你喜欢
      • 2022-01-18
      • 2022-07-19
      • 2020-04-29
      • 2021-03-08
      • 1970-01-01
      • 2018-10-31
      • 2021-04-26
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多