Liquibase® version 3.8.5 is now available! Get it for free.
2018 XML Announcement
News All Previous Posts >>

Subscribe for email updates

- and/or -

Contexts

Liquibase中的"上下文"是可以添加到changeSet中的表达式,以控制将在任何特定迁移运行中执行的表达式. 任何字符串都可以用作上下文名称,并且不区分大小写地对其进行检查.

通过任何可用方法运行迁移器时,可以传入一组上下文以运行. 仅运行带有传递的上下文标记的changeSet.

如果您未将上下文分配给changeSet,则它将始终运行,无论您将什么上下文传递给迁移器.

如果在运行迁移器时未指定上下文,则将运行所有上下文.

这是使用context属性的变更集的示例:

   <changeSet id="2" author="bob" context="test">
        <insert tableName="news">
            <column name="id" value="1"/>
            <column name="title" value="Liquibase 0.8 Released"/>
        </insert>
        <insert tableName="news">
            <column name="id" value="2"/>
            <column name="title" value="Liquibase 0.9 Released"/>
        </insert>
    </changeSet>

Context Syntax

可以使用AND,OR 、!指定上下文. 和括号. 不带括号的操作顺序为"!",然后是" AND",然后是" OR".

Examples:

  • context=”!test”
  • context =" v1.0或地图"
  • context =" v1.0或地图"
  • context ="!qa和!master"

使用","分隔上下文类似于"或"运算,但具有最高优先级.

Examples:

  • "测试,质量检查"与"测试或质量检查"相同
  • "测试,质量保证和母版"与"(测试)或"(质量保证和母版)相同

Availability:

  • 在所有版本的Liquibase中都可以使用","分隔符
  • 3.2.0中添加了" AND,OR,!,括号"

Using Contexts for Test Data

如果您要使用Liquibase管理测试数据,最好的添加方式是与所有其他changeSet内联,但标记为"测试"上下文. 这样,当您要插入测试数据时,可以在" test"上下文中运行迁移器. 当需要迁移生产数据库时,请不要包含"测试"上下文,并且也不包含测试数据(请注意,如果根本不指定任何上下文,则将应用每个变更集,包括那些标有"测试"上下文的网站). 如果您有多个测试环境或测试数据集,只需使用不同的上下文(例如"最小测试","集成测试"等)对其进行标记.

使用上下文控制测试数据比使用单独的changeLog树更好,因为稍后的重构和更改将应用​​于现有测试数据,与应用于生产数据的方式相同. 如果在建立数据库后创建并添加了一组测试数据,则将不断地手动更新测试数据脚本,以使其与当前数据库架构保持一致.

Using Contexts for Multi-DBMS Change Logs

您可以使用上下文来控制哪些更改集在哪些数据库上运行,但是更好的选择是使用changeSet标记上的内置" dbms"标记.

Default context

从Liquibase 3.5开始,您可以在根databaseChangeLog节点中指定上下文属性,以默认将该上下文分配给changelog中的所有changeSet.

指定的上下文将与changelog文件中的changeSets中指定的任何上下文进行"与"运算.

Include/IncludeAll context

从Liquibase 3.5开始,可以在<include><includeAll>标记中指定上下文属性. 如果指定,则将给定上下文添加到包含文件中的所有changeSet中.

by  ICOPY.SITE