我正在使用Liquibase,并希望在两种不同的变体(生产和测试)中执行相同的脚本:
<changeSet author="..." id="...">
<insert tableName="...">
<column name="ACTIVE" value="${isActive}" />
</insert>
</changeset>
目前,我使用一个属性在两个文件中进行引导:
<!--File1: For production -->
<property name="isActive" value="true"/>
<!--File2: For tests-->
<property name="isActive" value="false"/>
有没有一种方法可以在Liquibase中使用类似概要文件的东西(如Maven中)或使用命令行参数?我希望避免处理两个不同的文件,一个用于生产,另一个用于测试系统。
您可以为属性或changeSet本身指定context
参数:
<property name="isActive" value="true" context="prod"/>
<property name="isActive" value="false" context="test"/>
然后以某种方式将上下文参数传递给liquibase:
mvn liquibase:migrate -Dliquibase.contexts=prod
我知道这篇文章很旧,但我发现了一种直接使用maven概要文件的更干净的方法。(由于您要求使用maven配置文件)。您可以使用liquibase.properties文件;参数";属性,以便从您的变更日志中访问变量。假设您使用maven配置文件";prod";,然后将以下内容包含到liquibase-prod.properties中:
parameter.isActive=true
现在你可以简单地调用:
mvn -Pprod liquibase:update
然后它会自动替换您放入变更日志的${isActive}变量:
<property name="isActive" value="${isActive}"></property>
如果使用cmd或终端,则使用:
--contexts=prod
对我来说,pom.xml中的配置文件设置很鼓舞人心:
<profiles>
<profile>
<id>db-diff</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
...some profile db-diff settings like url, username password...
</profile>
<profile>
<id>db-update</id>
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
...some profile db-update settings like url, username, password...
</profile>
例如使用概要文件数据库更新进行更新:
mvn liquibase:update -Pdb-update