Не удалось обновить приложение Spring Boot до Flyway 7.0.0

#java #spring-boot #flyway

#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

Комментарии:

1. пожалуйста, предоставьте базу кода github для проверки проблемы.

2. @AnishB. github.com/flyway/flyway

3. можете ли вы предоставить свой проект через github?

4. @AnishB. Я не могу

5. В Flyway 7 мы внесли кардинальные изменения в API, одним из которых было изменение функции migrate(), чтобы возвращать информацию о том, что было перенесено, вместо простого int . В результате оно не будет совместимо с spring boot до тех пор, пока не будет выпущена новая версия springboot, скомпилированная для этой новой версии. Я бы посоветовал поднять проблему на spring boot github github.com/spring-projects/spring-boot/issues

Ответ №1:

В принципе, см. Комментарий Филиппа к вашему вопросу.

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

Комментарии:

1. Источник: github.com/spring-projects/spring-boot/issues/23514

Ответ №3:

работает понижение до Flyway 6.5.7.