我目前正在试用liquibase,并且在非常具体的情况下遇到回滚问题。
我已经实现了一个Spring监听器bean来从我的Web应用程序中启动liquibase,其想法是部署最新的Web代码和数据库后端,只需部署Web代码,启动应用程序,liquibase将以任何必需的方式运行数据库更改。 (更改日志文件驻留在Web应用程序中)
到目前为止一切顺利。一切都很好。尝试执行回滚时出现问题。因此,我试图实现的方案是,为了回滚应用程序版本,我应该简单地部署旧版本的Web应用程序(使用旧版本的changelog文件),然后执行回滚到之前的状态数据库也是如此。
这需要在应用程序属性文件中捕获回滚标记,并将更改日志复制到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上,这会产生影响吗?
答案 0 :(得分:0)
见上面的评论。解决方案是使用Liquibase类的多个实例