我们已经改变了一个:
--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运行 - 但只有当我们通过上下文时才会运行:堪萨斯?
答案 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>