Пропускная отметка пролета Flyway 3.0 Несоответствие контрольной суммы миграции
после обновления плагина Flyway Maven с 2.3 до 3.0 я получаю:
[ERROR] Не удалось выполнить цель org.flywaydb: flyway-maven-plugin: 3.0: migrate (default-cli) в проекте xxx: org.flywaydb.core.api.FlywayException: проверка завершена. Найденный различия между применяемыми миграциями и доступными миграциями: Несоответствие контрольной суммы миграции для миграции V003__data_feed_sources_locations.sql: DB = 942424992, Classpath = 1117634405 → [Помощь 1]
Получена аналогичная ошибка для другого проекта.
Если я откажусь назад до 2.3, миграция начнется нормально. Это имеет какое-то отношение к различной платформенной кодировке для вычисления контрольных сумм?
Любое обходное решение или, еще лучше, правильное решение?
Привет
Ответы
Ответ 1
Flyway 3.0 изменил значение по умолчанию validateOnMigrate на true.
Это, однако, хорошо, поскольку в духе неудачной попытки ошибки обнаруживаются раньше.
В вашем случае некоторые скрипты изменились с тех пор, как они были применены, о чем сообщает Flyway.
У вас есть два варианта:
- подавить ошибку, установив validateOnMigrate в false (2.3 по умолчанию)
- вызывать Flyway.repair() для перевыбора контрольных сумм.
Ответ 2
Чтобы добавить к Axel Fontaine ответ:
Мне удалось использовать mvn flyway: repair, но мне пришлось указать свойство конфигурации flyway.locations
в папке, содержащей мои сценарии миграции db. В противном случае я бы получил сообщение "Ремонт таблицы метаданных xyz.schema_version не требуется". как упомянуты другие люди.
Я использовал mvn -Dflyway.locations=filesystem:<project dir>/src/main/resources/db/migrations flyway:repair
, и я видел, что контрольная сумма обновлена в таблице метаданных, исправляя мою проблему.
Ответ 3
Проблема возникает сразу после того, как я сменил файл V1_2__books.sql ddl. Должен быть лучший способ заставить flyway распознавать новые изменения.
Я пытался запустить mvn flyway: repair, но это не сработало, я в конечном итоге изменил url схемы в файле application.properties [datasource.flyway.url] на books2
Я удалил также следующие файлы (книги - это мое старое имя схемы)
~ @~:rm books.mv.db
~ @~:rm -r books.trace.db
datasource.flyway.url=jdbc:h2:file:~/books2
datasource.flyway.username=sa
datasource.flyway.password=
datasource.flyway.driver-class-name=org.h2.Driver
Я запустил приложение и BINGO:)
Ответ 4
Существует еще одно решение. Вы можете отменить переход из таблицы schema_version.