【问题标题】:Liquibase rollback silently fails when using copy of changelog file使用更改日志文件的副本时,Liquibase 回滚静默失败
【发布时间】:2017-11-01 11:18:00
【问题描述】:

我目前正在试用 liquibase,但在非常具体的场景中遇到回滚问题。

我已经实现了一个 Spring listener bean 来从我的 web 应用程序中启动 liquibase,其想法是部署最新的 web 代码和数据库后端,您只需部署 web 代码,启动应用程序,liquibase 将在任何需要的环境中运行数据库更改。 (更改日志文件驻留在网络应用程序中)

到目前为止一切顺利。这一切都很好。尝试回滚时会出现问题。所以我试图实现的场景是,要回滚应用程序版本,我应该简单地部署旧版本的 Web 应用程序(使用旧版本的变更日志文件),然后执行回滚到以前的状态数据库也是如此。

这需要在应用程序属性文件中捕获回滚标记并将更改日志复制到 Web 服务器可以访问以运行回滚的位置(因为如果我在应用程序中的更改日志将不再具有要回滚的更改集'正在部署旧版本)。

问题是尽管没有抛出错误,但没有发生回滚步骤。我怀疑当 liwuibase 尝试从 Web 服务器上复制的更改日志中回滚更改时,不知何故 MD5 校验和不同,因此它不会回滚它们。

这是一个示例更改日志。我提供了一个logicalFilePath,并且还尝试使用validCheckSum 来确保没有校验和失败。但是,回滚仍然没有发生。

<?xml version="1.0" encoding="UTF-8"?>

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"
logicalFilePath="/liquibase/changelogs/sprint2/changelog.xml">


<changeSet id="5" author="Craig" runOnChange="true">
    <validCheckSum>*</validCheckSum>
    <comment>liquibase_proc.sql</comment>
    <sqlFile path="liquibase_proc.sql" relativeToChangelogFile="true"
        endDelimiter="\nGO" />
    <rollback>
        <sql>drop procedure liquibase_proc</sql>
    </rollback>
</changeSet>

<changeSet id="BUILD-1.2" author="build-auto">
    <validCheckSum>*</validCheckSum>
    <tagDatabase tag="BUILD-1.2" />
</changeSet>

</databaseChangeLog>

有人有什么想法吗?仅供参考,复制的变更日志位于 unix 框上,而原始版本位于 windows 上,这会产生影响吗?

【问题讨论】:

  • 能否将liquibase日志级别设置为debug并包含生成的日志文件?
  • 好的,我发现了这个问题。我试图将 Liquibase 实例的更改日志位置从一个位置更改到另一个位置。如此有效,如果在新更改中运行,则使用 Web 应用程序中的更改日志,如果运行回滚,则使用 Web 服务器上的更改日志。但是,尝试更改 Liquibase 实例的更改日志位置并没有按预期工作。解决方案是拥有两个独立的 Liquibase 实例,每个更改日志位置一个。

标签: java spring liquibase rollback


【解决方案1】:

见上面的评论。解决方案是使用 Liquibase 类的多个实例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2015-08-01
    • 2021-12-29
    • 2015-01-27
    • 2021-10-26
    • 2015-10-12
    • 2020-02-16
    相关资源
    最近更新 更多