问题描述
是否有可能逃脱 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}
替换它。