无法将Spring Boot应用升级到Flyway 7.0.0

时间:2020-10-02 14:45:53

标签: java spring-boot flyway

我正在尝试升级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的单个兼容版本

3 个答案:

答案 0 :(得分:3)

基本上,请参见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

答案 1 :(得分:2)

在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();
    }
}

答案 2 :(得分:0)

降级为Flyway 6.5.7的作品。