在生产部署时使用liquibase自动回滚

时间:2013-01-29 10:40:32

标签: java-ee maven liquibase

我使用工具liquibase在带有liquibase-maven-plugin的java ee项目中进行数据库更改。到目前为止,我在我的本地机器上试了一下,但需要在生产过程中进行下一步。

本地我可以做更新,回滚,将标签作为一种检查点和替换备份。此更新已完全自动化。它在项目运行之前执行:

<plugin>
  <groupId>org.liquibase</groupId>
  <artifactId>liquibase-maven-plugin</artifactId>
  <version>2.0.5</version>
  <configuration>
    ..
  </configuration>
  <executions>
    <execution>
      <phase>process-resources</phase>
      <goals>
        <goal>update</goal>
      </goals>
    </execution>
  </executions>
</plugin>

我可以进行回滚并将标记放在命令行中,例如:

mvn liquibase:tag -Dliquibase.tag=release1
mvn liquibase:rollback -Dliquibase.rollbackTag=release1

在poduction服务器上,我希望一切都完全自动化。当部署失败时,我主要对db-rollbacks感兴趣,我需要回到项目的私有版本。
设置标记应该像How to tag a changeset in liquibase to rollback中描述的那样工作。

但是如何完全自动化管理回滚?

  1. 是否有可能为回滚制作目标?如果是的话:我如何在其执行时控制?我不想在项目中偶然创建一个循环来调用update和rollback。
  2. 通常的做法是:backup1,update,run。如果失败,请返回backup1。这是自动的吗?我担心一旦出现问题(运行项目时),你就不能再自动执行回滚了。

1 个答案:

答案 0 :(得分:0)

我不相信可以在Maven中动态启用/禁用插件执行。您必须事先知道更新是否成功,当然您不会。

但是,您可以通过在更新过程运行后设置成功/失败属性来Ant执行此操作。您可以通过Maven AntRun plugin轻松地将Ant脚本连接到Maven。