Liquibase在多个数据库上

use*_*867 5 liquibase maven

我已经使用Maven实现了Liquibase。我们当前使用的是单个数据库(db2),但是现在我们需要向应用程序中添加一个具有不同对象的新数据库。

我已经看到我可以在Maven中定义一个新的配置文件,但是我找不到如何区分在哪个数据库上创建哪些对象的方法。

这个问题有方法解决吗?我可以使用liquibase支持2个具有不同对象的不同数据库吗?

Art*_*lpe 5

正如您在文档中所见,您可以使用两种不同的执行方式,如下所示:

<plugin>
  <groupId>org.liquibase</groupId>
  <artifactId>liquibase-maven-plugin</artifactId>
  <version>3.0.5</version>
  <executions>
    <execution>
      <phase>process-resources</phase>
      <configuration>
        <changeLogFile>PATH_TO_CHANGELOG_1</changeLogFile>
        ... connection properties  ...
      </configuration>
      <goals>
        <goal>update</goal>
      </goals>
    </execution>
   <execution>
      <phase>process-resources</phase>
      <configuration>
        <changeLogFile>PATH_TO_CHANGELOG_2</changeLogFile>
        ... connection properties  ...
      </configuration>
      <goals>
        <goal>update</goal>
      </goals>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

这种方法的唯一问题是您需要两个不同的changelog.xml文件,每个数据库一个。

此外,您可以在变更日志文件中设置先决条件,以在每个数据库将处理的变更集之间进行选择。

例如:

<changeSet id="1" author="bob">
    <preConditions onFail="MARK_RAN">
         <dbms type="oracle" />
    </preConditions>
    <comment>Comments should go after preCondition. If they are before then liquibase usually gives error.</comment>
    <dropTable tableName="oldtable"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

onFail="MARK_RAN"使 Liquibase 跳过变更集但将其标记为运行,因此下次它不会再试一次。有关 更复杂的先决条件,请参阅文档中customPrecondition标记。


Ste*_*nie 4

您可能希望有 2 个单独的变更日志来管理这两个数据库,即使它们都由同一个应用程序使用。