2015-04-03 11 views
2

我們已經變更集之一:使用Liquibase上下文有條件地激活/停用更改集

--changeset change_one runOnChange:true 

而且變更集二:

--changeset change_two runOnChange:true context:kansas 

change_one適用於我們所有的安裝,但change_two只適用於我們的「堪薩斯「安裝。我們希望確保change_two在change_one被更改時執行 - 我們如何做到這一點?

change_one has runOnChange:true,所以只要更改就會運行。但是,我們如何確保change_two在change_one執行時運行 - 但只有當我們傳遞上下文時:堪薩斯?

+2

你就不能使用'<前提>'用''在變更二號呢?所以它只在執行changeSet後執行? – Jens 2015-04-14 11:17:40

+1

@Jens我最終使用了一個先決條件。謝謝。 – 2016-06-09 16:38:43

回答

3

當您運行Liquibase而未指定任何上下文時,您可能會認爲沒有上下文應該被激活,但實際上它將在所有上下文中激活。如果您在更改日誌中使用上下文來禁用更改集,則每次執行Liquibase時都必須設置上下文參數。例如

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

您還應該檢查Liquibase 3.3中添加的labels功能。區別在於調用者可以指定一些複雜的表達式。例如

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> 
+0

非常有幫助知道... – 2016-07-22 14:57:52