Liquibase回滚Spring Boot

8

我有一个使用Spring Boot构建的微服务。我集成了Liquibase,它执行所有changeSet,除了rollback。 以下是示例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>

当我运行Spring Boot应用程序时,它不执行回滚。但在数据库中,更改已更新为已执行。


2
在报告问题时,请始终包括以下三个要素:1.这是我做的事情。2.这是我期望发生的事情。3.这是实际发生的事情。 我对这个问题的所有三个要点都不清楚。 我认为您可能对回滚的用途感到困惑-它们通常被添加为更改集的“子更改”,以指示如何“撤消”更改。创建一个表的回滚似乎非常奇怪。更好的例子是,您可能有一个创建表的更改集,然后在该更改集中进行回滚以删除该表。 - SteveDonie
谢谢,我会更新问题。 - Keaz
我可能有些冒险,但是创建表不是DDL吗?无法回滚?你尝试在回滚子句中使用除了创建表之外的其他语句了吗? - Syed Anas
1个回答

9
在你的示例中,changeSet id="7"并没有实际的更改。它只是一个回滚语句,逻辑上不正确,因为没有表被作为更改集的一部分删除。您可以参考Rolling Back ChangeSets文档学习如何编写回滚操作。
回滚操作应该在将模式迁移到较低版本时执行,例如在降级Spring Boot应用程序版本后执行。这不是Spring Boot开箱即用的功能,它只使用常规Liquibase更新操作应用丢失的变更集。
Spring Boot有一个liquibase.rollback-file属性,可用于编写回滚SQL脚本。当您回滚模式时,您需要手动运行此SQL。您可以尝试Maven Liquibase Plugin来自动化这个过程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接