在 liquibase 中使用配置文件

Using profiles in liquibase

我正在使用 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"/>

有没有办法使用配置文件之类的东西(如在 Maven 中)或在 Liquibase 中使用命令行参数?我想避免处理两个不同的文件,一个用于生产系统,一个用于测试系统。

您可以为 属性 或 changeSet 本身指定 context 参数:

<property name="isActive" value="true" context="prod"/>
<property name="isActive" value="false" context="test"/>

然后通过某种方式将上下文参数传递给liquibase:

mvn liquibase:migrate -Dliquibase.contexts=prod

如果您使用 cmd 或终端,请使用:

--contexts=prod

我知道 post 很旧,但我发现了一种直接使用 Maven 配置文件的更简洁的方法。 (因为您要求使用 Maven 配置文件)。 您可以使用 liquibase.properties 文件并使用 liquibase 的“参数”属性来访问更改日志中的变量。 假设您使用 Maven 配置文件“prod”,那么您将以下内容添加到 liquibase-prod.properties:

parameter.isActive=true

现在您只需调用:

mvn -Pprod liquibase:update

然后它将自动替换您放入更改日志中的 ${isActive} 变量:

<property name="isActive" value="${isActive}"></property>