Я использую Liquibase в проекте со средой Spring. Однако функция отката, похоже, не работает.
Я подозреваю, что функция отката не поддерживается при использовании Spring для запуска Liquibase, поскольку в руководстве говорится:
LiquiBase позволяет вам отменить изменения, внесенные в вашу базу данных, либо автоматически, либо с помощью настраиваемого SQL отката. Поддержка отката доступна в командной строке, Ant, Maven и Grails.
Однако трудно поверить, что откат невозможен в этой настройке. Возникает вопрос: почему не работают откаты и как заставить откаты работать?
РЕДАКТИРОВАТЬ:
Теперь я понимаю, что мне следовало задать вопрос немного по-другому. Я бы хотел, чтобы откаты происходили, если при миграции что-то пойдет не так.
Я попытался использовать транзакции (как я полагаю, они есть), но это не дало желаемого эффекта.
Пример набора изменений, который пойдет не так:
<changeSet runInTransaction="true">
<createTable tableName="table1">
<column name="a" type="int"/>
</createTable>
<createTable tableName="table1">
<column name="a" type="int"/>
</createTable>
<createTable tableName="table2">
<column name="a" type="int"/>
</createTable>
</changeSet>
Когда я запускаю пример набора изменений, Liquibase удается создать table1, но когда он пытается создать другую таблицу с тем же именем, он терпит неудачу (очевидно). Созданная таблица не удаляется и сохраняется в базе данных.
Просматривая руководство по Liquibase, я замечаю, что:
runInTransaction
Следует ли запускать changeSet как одну транзакцию (если возможно)? По умолчанию true. Предупреждение: будьте осторожны с этим атрибутом. Если установлено значение false и ошибка возникает на этапе выполнения changeSet, содержащего несколько операторов, таблица журнала изменений базы данных LiquiBase останется в недопустимом состоянии. Начиная с версии 1.9
Я использую MySQL, но набор изменений также должен работать с MSSQL и Oracle.
Я также использую транзакции Spring, и они отлично работают, есть идеи о том, как получить одновременно великолепие Liquibase и эти потрясающие (независимые от базы данных) транзакции?