代码之家  ›  专栏  ›  技术社区  ›  Mad Scientist

用AND分解上下文

  •  0
  • Mad Scientist  · 技术社区  · 6 年前

    liquibase documentation 可以在用AND、OR、指定的变更集中定义上下文!和括号。但我没有找到一个方法通过 contexts=" V1.0 AND V2.0" 参数,因为每次我这样做时,liquibase都会生成一个空的SQL文件。我就是这样尝试的:

     .\liquibase --url=offline:mssql? `
    --changeLogFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\cl.xml" `
    --outputFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\output.sql" `
    --contexts="V1.0 AND V2.0" `
    updatesql
    

    V1.0, V2.0 所以他用两个版本中的一个生成所有变更集,但我只需要生成同时具有这两个上下文(V1.0和V2.0)的变更集。

    <changeSet author="Ferid" id="1536838228609-1" context="V1.0"> ... </changeSet>
    <changeSet author="Ferid" id="1536838228609-2" context="V2.0"> ...</changeSet>
    
    <changeSet author="Ferid" id="1536838228609-3" context="V1.0 AND V2.0"> ...</changeSet>
    

    我尝试过不同的语法,但没有一个对我有用。我用的是Liquibase3.5.5。

    1 回复  |  直到 6 年前
        1
  •  2
  •   SteveDonie    6 年前

    上下文最好用于环境(比如开发、阶段、生产)。对于你正在做的事情,最好使用标签。

    一个关键的区别体现在下表中:

                       labels             contexts
    in commands        expression         list
    in changelog       list               expression
    

    因此,在定义变更日志时,每个变更集都可以有一个“labels”属性,该属性可以包含以逗号分隔的标签列表。每个变更集都可以有一个“contexts”属性,该属性可以包含一个复杂的上下文表达式。复杂表达式类似于“qa or(acme\u inc and dev)”

    下面链接的文章将深入讨论,但一般来说,当您可以简单地枚举/描述变更集的用途时,标签是有用的,但部署时环境很难描述。当应该在其中部署变更集的“上下文”是一个复杂的决定,最好由变更集作者而不是部署者来决定时,上下文是有用的。

    Nathan在博客中写道,有一个地方可以更深入地了解Liquibase是如何处理这些问题的: http://www.liquibase.org/2014/11/contexts-vs-labels.html