使用Liquibase上下文有条件地激活/停用更改集

时间:2015-04-03 19:00:14

标签: liquibase

我们已经改变了一个:

--changeset change_one runOnChange:true

并且变换二:

--changeset change_two runOnChange:true context:kansas

change_one适用于我们所有的安装,但change_two仅适用于我们的"堪萨斯州"安装。我们想确保每当change_one发生变化时都会执行change_two - 我们该怎么做?

change_one有runOnChange:true所以它会在每次更改时运行。但是,当change_one执行时,我们怎样才能确保change_two运行 - 但只有当我们通过上下文时才会运行:堪萨斯?

1 个答案:

答案 0 :(得分:4)

当您在未指定任何上下文的情况下运行Liquibase时,您可能希望不应激活任何上下文,但事实上它将激活所有上下文中的works as documented。如果在更改日志中使用上下文来禁用更改集,则必须在执行Liquibase时设置contexts参数。 e.g。

mvn process-resources liquibase:update -Dliquibase.contexts=production

您还应该检查Liquibase 3.3中添加的labels功能。区别在于调用者可以指定一些复杂的表达式。 e.g。

mvn process-resources liquibase:update -Dliquibase.labels=!kansas

但请注意,当未指定标签表达式时,行为与上下文相同。

示例更改集:

<changeSet id="tag-v1" author="a">
    <tagDatabase tag="v1"/>
</changeSet>

<changeSet id="tag-v1a" author="a" context="kansas">
    <tagDatabase tag="v1a"/>
</changeSet>

<changeSet id="tag-v1b" author="a" labels="kansas">
    <tagDatabase tag="v1b"/>
</changeSet>