Java 使用changelog文件的副本时,Liquibase回滚以静默方式失败

Java 使用changelog文件的副本时,Liquibase回滚以静默方式失败,java,spring,liquibase,rollback,Java,Spring,Liquibase,Rollback,我目前正在试用liquibase,并且在一个非常具体的场景中遇到了回滚问题 我已经实现了一个Spring listener bean来从我的web应用程序中启动liquibase,其思想是要部署最新的web代码和数据库后端,只需部署web代码,启动应用程序,liquibase就会在任何需要的数据库更改中运行。(更改日志文件位于web应用程序中) 到目前为止还不错。这一切都很好。当尝试执行回滚时会出现问题。因此,我尝试实现的场景是,要回滚应用程序版本,我应该简单地部署web应用程序的旧版本(使用c

我目前正在试用liquibase,并且在一个非常具体的场景中遇到了回滚问题

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

到目前为止还不错。这一切都很好。当尝试执行回滚时会出现问题。因此,我尝试实现的场景是,要回滚应用程序版本,我应该简单地部署web应用程序的旧版本(使用changelog文件的旧版本),并执行回滚到数据库的先前状态

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

问题是,尽管没有抛出错误,但回滚步骤不会发生。我怀疑当liwuibase试图从web服务器上复制的changelog回滚更改时,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>

*
liquibase_proc.sql
删除程序liquibase_proc
*

有人有什么想法吗?仅供参考,复制的更改日志位于unix框中,与windows上的原始更改日志一样,这是否会产生影响?

请参见上面的注释。解决方案是使用Liquibase类的多个实例

能否将Liquibase日志级别设置为调试并包含生成的日志文件?好的,所以我解决了问题。我试图将Liquibase实例的changelog位置从一个位置更改为另一个位置。因此,如果在新更改中运行,则在web应用程序中使用changelog;如果运行回滚,则在web服务器上使用changelog。但是,尝试更改Liquibase实例的changelog位置没有按预期工作。解决方案是有两个单独的Liquibase实例,每个changelog位置一个。