Пружины Liquibase Rollback Spring

У меня есть микросервис, построенный с использованием весенней загрузки. Я интегрировал Liquibase, и он выполняет все changeSet, кроме отката. Ниже приведен пример XML-файла Liquibase.

<changeSet id="6" author="Kasun">
        <insert tableName="user">
            <column name="firstNale" value="Kasun" ></column>
            <column name="lastName" value="Ranasinghe" ></column>
        </insert>
    </changeSet>
    <changeSet id="7" author="Kasun">
        <rollback changeSetAuthor="Kasun"  >
            <createTable tableName="user" />
        </rollback>
    </changeSet>

Когда я запускаю приложение весенней загрузки, оно не выполняет откат. Но в базе изменения обновляются по мере выполнения.


person Keaz    schedule 03.04.2018    source источник
comment
Сообщая о проблеме, всегда указывайте три вещи: 1. Это то, что я сделал. 2. Это то, чего я ожидал. 3. Вот что произошло на самом деле. Мне неясны все три пункта в этом вопросе. Я думаю, вы можете быть сбиты с толку относительно того, для чего нужны откаты - они обычно добавляются в качестве «подменения» набора изменений, чтобы указать, как отменить изменение. Очень странно иметь откат, который создает таблицу. Лучшим примером является то, что у вас может быть набор изменений, который создает таблицу, а затем откат в этом наборе изменений, который удаляет таблицу.   -  person SteveDonie    schedule 03.04.2018
comment
Спасибо, обновлю вопрос.   -  person Keaz    schedule 03.04.2018
comment
Я мог бы пойти на конечность здесь, но разве не создать таблицу DDL, которую нельзя откатить? пробовали ли вы какой-либо другой оператор в предложении отката, кроме таблицы создания   -  person Anas    schedule 03.04.2018


Ответы (1)


В вашем примере changeSet id="7" не имеет фактических изменений. это просто оператор отката, который логически неверен, поскольку ни одна таблица не удаляется как часть набора изменений. Вы можете обратиться к документам по откату ChangeSets, чтобы узнать, как писать откаты.

Откат должен выполняться при переносе схемы на более низкую версию, например. после понижения версии приложения Spring Boot. Это не то, что делается из коробки с помощью Spring Boot, которая применяет только отсутствующие наборы изменений, используя обычную операцию обновления Liquibase.

В Spring Boot есть свойство liquibase.rollback-file, которое можно использовать для написания SQL-скрипта отката. При откате схемы вам придется запускать этот SQL вручную. Вы можете попробовать Maven Liquibase Plugin, чтобы автоматизировать его.

person Karol Dowbecki    schedule 03.04.2018