如果上下文不匹配,则将 liquibase-changeSet 标记为运行

问题描述 投票:0回答:1

我用 liquibase 管理我的数据库模式,我也想用 liquibase 管理演示数据。现在我正在寻找一个将两者结合在一起的好策略。

我的计划是向应该插入演示数据的变更集添加一个“演示数据”上下文。这行得通。如果我在另一个上下文中运行它们,它们将被忽略(如预期的那样)。

但我想要的是,它们也被标记为运行而不是被忽略。一般来说,这在有先决条件的情况下是可能的。但是我没有找到一种方法来根据上下文或标签进行前置条件。

你知道怎么做吗?

示例变更集:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
    <changeSet  author="me"  id="1">
        <createTable tableName="users">
            <column  name="id"  type="Integer">
                <constraints  nullable="false"  primaryKey="true"  unique="true"/>
            </column>
            <column  name="firstname"  type="VARCHAR(255)">
                <constraints nullable="false" />
            </column>
            <column  name="lastname"  type="VARCHAR(255)">
                <constraints nullable="false" />
            </column>
        </createTable>
    </changeSet>

    <changeSet  author="me"  id="2" context="demo-data">  
       <preConditions  onFail="MARK_RAN">
            context = demo-data
        </preConditions>

        <insert  tableName="users">  
            <column  name="id"  value="1"/>  
            <column name="firstname" value="Phil"/>
            <column name="lastname" value="Harmony"/>
        </insert>  
    </changeSet>
</databaseChangeLog>

如果我运行以下两个命令,我不想在数据库中有演示数据,因为这有可能在这两次运行之间更改数据库模式。而且我也想避免在任何时候意外添加旧的演示数据

liquibase update --contexts="any-non-existing-context" // Workaround for "everything except demo-data"
liquibase update --contexts="demo-data"
liquibase
1个回答
0
投票

是的,

contex
不在支持的先决条件列表中,但您可以编写自己的自定义先决条件,该条件将使用提供的值对名为
context
的参数执行检查:

<preConditions>
    <customPrecondition className="com.example.ContextPrecondition">
        <param name="context" value="demo-data"/>
    </customPrecondition>
</preConditions>

查看 Liquibase 文档中的这个示例,了解如何实现自定义前提条件https://contribute.liquibase.com/extensions-integrations/extension-guides/add-a-precondition/

© www.soinside.com 2019 - 2024. All rights reserved.