#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.