Liquibase 回滚弹簧靴

Kea*_*eaz 4 liquibase spring-boot

我有一个使用 spring boot 构建的微服务。我整合了Liquibase并执行所有变更小号除了回滚秒。下面是示例 liquibase xml 文件。

<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>
Run Code Online (Sandbox Code Playgroud)

当我运行 spring boot 应用程序时,它不会执行回滚。但是在数据库中的更改会随着执行而更新。

Kar*_*cki 5

在您的示例changeSet id="7"中没有实际更改。它只是一个回滚语句,在逻辑上是不正确的,因为没有表作为变更集的一部分被删除。您可以参考Rolling Back ChangeSets 文档了解如何编写回滚。

当您将模式迁移到较低版本时,例如在降级 Spring Boot 应用程序版本之后,应该执行回滚。这不是 Spring Boot 开箱即用的事情,它仅使用常规 Liquibase 更新操作应用丢失的变更集。

liquibase.rollback-fileSpring Boot 中有一个属性可用于编写回滚 SQL 脚本。当您回滚模式时,您必须手动运行此 SQL。您可以尝试使用Maven Liquibase Plugin来自动化它。