Flyway: Как заменить устаревшую SpringJdbcMigration без получения «FlywayException: Проверка не удалась»? - PullRequest
0 голосов
/ 11 декабря 2018

Обновление springboot 2.0.3 до 2.1.1 также приносит новую версию пролетного пути: 5.2.3 вместо 5.0.7.

В 5.2.3 SpringJdbcMigration устарела и будет удалена на пролетном пути 6. Iв основном используют сценарии sql, но у меня также есть один класс миграции java в проекте (существует 4 миграции sql, а последний, 4.2, - это миграция java - это был просто быстрый и грязный хак для изменения старых данных, и я немне это больше не нужно).

Поэтому я изменил этот класс:

class V4_2__Update_foo implements SpringJdbcMigration {
    public void migrate(JdbcTemplate jdbcTemplate) throws Exception {
    ...
    }
}

на

class V4_2__Update_foo extends BaseJavaMigration {
    public void migrate(Context context) throws Exception {
    JdbcTemplate jdbcTemplate = 
      new JdbcTemplate(new SingleConnectionDataSource(context.getConnection(), true));
    ......
    }
}

Это единственное изменение, все остальное тоже самое.В результате получается

Application run failed
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]:
Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException:
Validate failed: Migration type mismatch for migration version 4.2
....
Caused by: org.flywaydb.core.api.FlywayException:
Validate failed: Migration type mismatch for migration version 4.2
-> Applied to database : SPRING_JDBC
-> Resolved locally    : JDBC
at org.flywaydb.core.Flyway.doValidate(Flyway.java:1479)

Я не хочу постоянно отключать проверку, но я также не знаю, как решить эту проблему.Я попробовал поискать в Google, но ничего не нашел по поводу "несоответствия типов".На моей машине разработчика я попытался «восстановить путь», но он только сказал

Repair of failed migration in Schema History table "PUBLIC"."schema_version" not necessary. No failed migration detected.
Successfully repaired schema history table "PUBLIC"."schema_version"

Тип миграции 4.2 по-прежнему «SPRING_JDBC» после запуска восстановления.Позже я полностью удалил класс java, и я получил предупреждение, что

Schema "PUBLIC" has a version (4.2) that is newer than the latest available migration (4) !

, но, по крайней мере, приложение снова запустилось.Мне не очень удобно делать это на производстве.Есть еще идеи?

1 Ответ

0 голосов
/ 11 декабря 2018

Это определенно ошибка.К сожалению, это не будет исправлено в 5.2.x.Flyway 6.0 (выйдет в Q1 2019) автоматически исправит вашу таблицу истории схемы и исправит это.

В качестве альтернативы, если вы действительно не хотите ждать, вы можете вручную перейти к таблице истории схемы, чтобы это сообщение пошлопрочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...