【问题标题】:Liquibase Auto RollbackLiquibase 自动回滚
【发布时间】:2012-05-02 05:23:35
【问题描述】:

我正在处理一个分支,例如需要删除表 X 中的一列,我添加了一个更改并且它对那个特定的分支有好处,然后我切换到另一个仍然需要该列并且该更改需要被回滚。 db 有很多变化,例如从一个分支到另一个分支。

我为每个分支添加一个新的变更日志 xml,并将其包含在主变更日志 xml 中。显然,当我切换到另一个分支时,前一个分支的 changlog xml 不再在工作区中,并且 liquibase 不会将实际的变更集保存在数据库中,只有它的名称和应用它的时间,因此它将无法回滚更改自动。

我正在使用 Liquibase Servlet 在我的应用程序启动时应用更改。

Liquibase 专家,是否已经实施了解决此问题的简单方法?谢谢!

【问题讨论】:

  • 你有一个数据库和多个分支?或者它是一个临时数据库,每次测试运行都是新的?
  • 我猜你需要 a) 每个分支一个数据库 b) 每个分支一个变更日志。事实证明,为多个分支维护单个变更日志很容易出错
  • 每个分支都有一个变更日志,所有分支只有一个数据库实例,我不需要多个数据库,因为我是唯一的开发人员。
  • @user979051:如果你有多个分支,你确实需要多个数据库。其他一切都会给您带来麻烦(这就是您发布问题的原因)

标签: java liquibase


【解决方案1】:

很难跨代码分支共享单个数据库实例。如果您尝试在多个开发人员之间共享数据库,则会导致相同类型的问题。

Liquibase 旨在使用基于文件的变更集作为数据库变更的主记录。特殊表 DATABASECHANGELOG 旨在跟踪哪些变更集已应用于数据库实例。在分支之间切换会导致许多不可预知的混乱,例如:

  • 缺少变更集
  • 内容已更改的变更集(导致校验和错误)。
  • ...

最好的建议是在分支之间切换时刷新或重新同步数据库:

liquibase dropAll
liquibase update

在您的情况下,第二个操作可能是不必要的,因为 liquibase servlet 会在启动时更新数据库。

如果您担心丢失数据,请使用contexts 控制测试数据。

更新

如果您使用 Maven,则可以从 Maven 调用此“重新同步”操作,如下所示:

mvn -Presync compile

此配置文件在您的 POM 中配置如下:

    <profile>
        <id>resync</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>${liquibase.plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>process-resources</phase>
                            <configuration>
                                <url>${liquibase.url}</url>
                                <driver>${liquibase.driver}</driver>
                                <username>${liquibase.username}</username>
                                <password>${liquibase.password}</password>
                                <changeLogFile>${liquibase.changeLogFile}</changeLogFile>
                                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                            </configuration>
                            <goals>
                                <goal>dropAll</goal>
                                <goal>update</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多