【问题标题】:How can we use xinclude in Liquibase XML changlelog?我们如何在 Liquibase XML changlelog 中使用 xinclude?
【发布时间】:2020-01-21 08:04:43
【问题描述】:

我正在尝试在我的更改日志中包含另一个 xml 文件,它是 XML 文件的片段。每当我在 liquibase 中执行我的更改日志时,它都会成功执行(没有任何解析错误),但数据库中没有创建表。

我不确定我们是否可以在 liquibsae 中使用 xInclude,但我认为应该可以,因为我们在 liquibase 中使用了 xml。另外,我无法在 liquibase 和官方文档中找到任何 xinclude 示例。

Changelog.xml

<?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-3.8.xsd"
                       xmlns:xi="http://www.w3c.org/2001/Xinclude">

    <changeSet id="id-1234"
        author="umarTahir">

        <comment>creates table: employee</comment>
        <xi:include
            href="employee.xml" parse="xml"
         xpointer="title"/>

        <rollback>
            <dropTable schemaName="employee_test" tableName="employee" />
        </rollback>
    </changeSet>

</databaseChangeLog>

employee.xml

<createTable tableName="employee" xml:id="title">
    <column name="employee_id" type="UUID">
        <constraints primaryKey="true"
            primaryKeyName="employee_pkey" />
    </column>
    <column name="first_name" type="TEXT" />
    <column name="middle_name" type="TEXT" />
    <column name="last_name" type="TEXT" />
    <column name="email" type="TEXT" />
    <column name="n_created_by" type="TEXT" />
    <column name="n_created" type="TIMESTAMP WITHOUT TIME ZONE" />
    <column name="n_last_modified_by" type="TEXT" />
    <column name="n_last_modified"
        type="TIMESTAMP WITHOUT TIME ZONE" />
</createTable>

【问题讨论】:

    标签: java xml spring liquibase xinclude


    【解决方案1】:

    如果我错了,请纠正我,但据我了解,liquibase 会根据 dbchangelog-{version}.xsd 解析 changeLogs。

    &lt;xi:inlude&gt; 被忽略。事实上,即使你输入&lt;xi:foo-bar&gt;,changeLog仍然会解析成功,但&lt;xi:...&gt;会被忽略。

    所以,我建议使用&lt;include&gt; 标签来包含来自其他changeLog 文件的内容,或者使用&lt;sqlFile&gt; 来包含sql 文件。

    【讨论】:

    • include 用于仅添加更改日志文件对吗?但我没有包含在任何更改日志中,而是包含 xml 代码的一部分(即,用于创建表的 xml 包含在我的更改集中以使代码整洁)
    • 此外,我也尝试使用包含标签,但这会导致错误。似乎我们不能在开箱即用的 liquibase 中使用 xml 属性。
    • 我明白你想要做什么,但我怀疑这是否可能。看起来您唯一可以“包含”的东西 - 就是包含正确的更改日志。
    • @htshame 你是对的。这方面的文档及其原因在liquibase.org/documentation/include.html 此外,包含在 中的文件必须是完整的 XML 更改日志,而不是 XML 片段。
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 2019-04-09
    • 2015-08-26
    • 2023-03-14
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多