我已经用Maven实现了Liquibase。我们目前正在使用单个数据库(db2),但现在我们需要向具有不同对象的应用程序添加新数据库。
我已经看到我可以在maven中定义一个新的配置文件,但我无法找出如何区分在哪个数据库上创建哪些对象。
有解决方案吗?我可以使用liquibase支持具有不同对象的2个不同数据库吗?
答案 0 :(得分:3)
您可能希望有两个单独的更改日志来管理这两个数据库,即使它们都由同一个应用程序使用。
答案 1 :(得分:3)
正如您在documentation中所看到的,您可以使用两种不同的执行方式,如下所示:
<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>
此方法的唯一问题是您需要两个不同的changelog.xml
文件,每个数据库一个。
此外,您可以在更改日志文件中使用preconditions,以便在每个数据库处理更改集之间进行选择。
例如:
<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>
onFail="MARK_RAN"
使Liquibase跳过变更集但将其标记为运行,因此下次不再尝试。有关更复杂的前提条件,请参阅documentation中的customPrecondition
标记。
答案 2 :(得分:0)
正如Arturo所说,你可以拥有2个或更多的执行节点,但你必须为每个执行节点分配一个单独的id。
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.5</version>
<executions>
<execution>
<id>db1-update</id>
<phase>process-resources</phase>
<configuration>
<changeLogFile>src/main/resources/org/liquibase/db1.xml</changeLogFile>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost/db1</url>
<username>..</username>
<password>..</password>
</configuration>
<goals>
<goal>update</goal>
</goals>
</execution>
<execution>
<id>db2-update</id>
<phase>process-resources</phase>
<configuration>
<changeLogFile>src/main/resources/org/liquibase/db2.xml</changeLogFile>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost/db2</url>
<username>...</username>
<password>...</password>
</configuration>
<goals>
<goal>update</goal>
</goals>
</execution>
<execution>
<id>db3-update</id>
<phase>process-resources</phase>
<configuration>
<changeLogFile>src/main/resources/org/liquibase/db3.xml</changeLogFile>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost/db3</url>
<username>...</username>
<password>...</password>
</configuration>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>