Что произойдет, если миграция java flyway вызовет исключение?

Мне было интересно, как Flyway обрабатывает исключения, выдаваемые классами, реализующими интерфейс JdbcMigration.

Откатывает ли Flyway транзакцию? Прекращает ли он дальнейшие миграции?


person Shilpam    schedule 16.07.2013    source источник
comment
Да, он будет откатывать транзакцию до тех пор, пока не будет выполнен последний хорошо выполненный скрипт или последний коммит. Затем он зарегистрирует исключение и уведомит вас (в зависимости от того, как вы его настроите).   -  person Luiggi Mendoza    schedule 16.07.2013
comment
Это может быть полезно: stackoverflow.com/questions/4959299/   -  person Suresh Atta    schedule 16.07.2013
comment
@LuiggiMendoza Ваш комментарий правильный. Превратите это в ответ.   -  person Axel Fontaine    schedule 17.07.2013
comment
Все, что я знаю, это то, что сегодня утром мне пришлось удалить несколько исключений из миграции пролетных путей с лобового стекла моей машины.   -  person Hot Licks    schedule 17.07.2013


Ответы (1)


Откатывает ли Flyway транзакцию?

Да, он будет откатывать транзакцию до тех пор, пока не будет выполнен последний хорошо выполненный скрипт или последний коммит. Затем он зарегистрирует исключение и уведомит вас (в зависимости от того, как вы его настроите).

Прекращает ли он дальнейшие миграции?

Насколько я знаю, это обычное поведение, оно остановится, если обнаружит ошибку.

person Luiggi Mendoza    schedule 17.07.2013
comment
Разве большинство баз данных не могут выполнить откат более чем для одного оператора DDL? Как Flyway справится со сценарием, в котором выполнена только половина операторов? - person Aleksandr Dubinsky; 05.08.2014
comment
@AleksandrDubinsky это похоже на атомарную операцию: все или ничего для каждого скрипта, если вы не измените эту конфигурацию. - person Luiggi Mendoza; 05.08.2014
comment
Из документов MySQL: некоторые операторы нельзя отменить. Как правило, к ним относятся операторы языка определения данных (DDL), например те, которые создают или удаляют базы данных, те, которые создают, удаляют или изменяют таблицы или хранимые подпрограммы. Т.е. любую транзакцию с таким оператором нельзя откатить. Некоторые БД поддерживают транзакции DDL (например, PostgreSQL). Другие поддерживают один оператор DDL для каждой транзакции. Liquibase открывает транзакцию для каждого оператора и записывает ее в метаданные, что может помочь (она знает, где остановилась). Для Flyway это звучит так, как будто вам лучше восстановить БД из моментального снимка. - person Aleksandr Dubinsky; 05.08.2014