Liquibase 如何逃避更改日志属性替换

问题描述

是否有可能逃脱 Liquibase Changelog Property Substitution

这是我的变更集:

<changeSet author="me" id="changeSetone">
    <sql>
        INSERT INTO TABLE_NAME (VALUE,DESCRIPTION) VALUES (
            '${ENVIRONMENT_VARIABLE}/some/path/','describe nothing');
    </sql>
</changeSet>

结果,(ENVIRONMENT_VARIABLE = "C:/foo"):

+-----------------+----------------+
|VALUE            |DESCRIPTION     |
+-----------------+----------------+
|C:/foo/some/path/|describe nothing|
+-----------------+----------------+

但我不想用 Liquibase 替换这个占位符,所以我的结果应该是这样的:

+----------------------------------+----------------+
|VALUE                             |DESCRIPTION     |
+----------------------------------+----------------+
|${ENVIRONMENT_VARIABLE}/some/path/|describe nothing|
+----------------------------------+----------------+

这可能吗?

解决方法

您寻求的是黑客攻击或逃脱方式(例如:\${ENVIRONMENT_VARIABLE}$${ENVIRONMENT_VARIABLE})。

我不知道这个特定问题是否与此有关:https://github.com/liquibase/liquibase/issues/1023 但是在有人修复它之前,您将不得不使用这个很棒的 hack™:

<property name="dollar" value="$" />

<update tableName="THE_TABLE">
  <column name="THE_COLUMN" value="${dollar}{ENVIRONMENT_VARIABLE}" />
</update>

然后,当liquibase看到${dollar}{ENVIRONMENT_VARIABLE}时,应该用${ENVIRONMENT_VARIABLE}替换它。