如果我要使用相同的变量但使用不同的值,如何替换下一个更改集的标记值。示例
<!-- TRANSLATION -->
<property name="localization.table" value="LOCALIZATION"/>
<property name="localization.locale" value="en_US"/>
<!-- -->
<property name="localization.key" value="translation.key"/>
<!-- Translation -->
<property name="localization.value" value="translation"/>
<!-- -->
<changeSet author="me" id="translate">
<insert tableName="${localization.table}">
<column name="KEY_">${localization.key}</column>
<column name="VALUE">${localization.value}</column>
<column name="LOCALE">${localization.locale}</column>
</insert>
<rollback>
<delete tableName="${localization.table}">
<!-- Doesnt work with regular '' symbols -->
<where>KEY_ = '${localization.key}' AND LOCALE = '${localization.locale}'</where>
</delete>
</rollback>
</changeSet>
此示例仅在我第二次
时首次使用设置或运行Liquibase时出错:liquibase.exception.SetupException:liquibase.exception.SetupException:解析第150行/patches/translate_me.xml第67行时出错:cvc-complex-type.2.4.a:找到无效内容从元素'property'开始。其中一个“{”http://www.liquibase.org/xml/ns/dbchangelog“:changeSet,”http://www.liquibase.org/xml/ns/dbchangelog“:include,”http://www.liquibase.org/xml/ns/dbchangelog“:includeAll}'是预期的。 - &GT; [帮助1]
如何更换呢?
答案 0 :(得分:0)
默认情况下,Liquibase属性是全局应用的,即使重新定义也将保持相同的值。
从Liquibase 3.4.0开始,property标签上有一个新的global
属性。设置global="false"
会将属性限制为它在其中定义的databaseChangeLog
,从而使您可以将该属性与其他databaseChangeLog
中的新值一起使用。
如果需要重新定义属性,则需要在新的databaseChangeLog
中完成。在您的特定情况下,我认为您遇到语法错误,因为您试图在同一databaseChangeLog中的changeSet之后定义属性。
示例:
<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-3.5.xsd">
<property name="myProperty" value="foo" global="false"/>
<changeSet author="me" id="changeSet-1">
<!-- will insert `foo` -->
<insert tableName="my_table">
<column name="my_column">${myProperty}</column>
</insert>
</changeSet>
</databaseChangeLog>
<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-3.5.xsd">
<property name="myProperty" value="bar" global="false"/>
<changeSet author="me" id="changeSet-2">
<!-- will insert `bar` -->
<insert tableName="my_table">
<column name="my_column">${myProperty}</column>
</insert>
</changeSet>
</databaseChangeLog>