仅使用 XML 时,Liquibase 在应用属性替换之前或之后计算变更集的校验和吗?

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

我有以下变更集,但找不到任何有关校验和是在属性替换之前还是之后计算的文档。

<changeSet author="[...]" id="[...]">
    <addColumn tableName="FOO">
        <column name="BAR" type="${type.string.max.80}" />
    </addColumn>
</changeSet>

不过,可能存在差异,因为对于嵌入到 XML 和 YAML 中的 SQL,处理方式与例如 SQL 相比有所不同。外部 SQL 文件。但就我而言,我根本没有任何简单的 SQL。

您可以使用 sql 和 sqlFile 更改类型的属性替换。请注意,Liquibase 在替换您指定的任何属性后会获取 sql 变更集的校验和。但是,它会在替换外部 SQL 文件中的属性之前获取 sqlFile 变更集的校验和。

https://docs.liquibase.com/concepts/changelogs/property-substitution.html?_ga=2.45579489.475291501.1716446628-689967727.1694174943

那么我的 XML 示例是什么情况?

谢谢!

liquibase
1个回答
0
投票

如果我正确回答了你的问题,尽管文档中没有指定,但如果我们制作并试验一个 spring-boot 应用程序并创建一个如下所示的变更集:

<changeSet id="foo" author="bar">
    <createTable tableName="${test1}">
        <column name="the_name" type="varchar(32)"/>
    </createTable>
</changeSet>

在 application.properties 中我们有:

spring.liquibase.parameters.test1=12345

Liquibase 将创建一个表“12345”。并在

databasechangelog
表中留下一条带有一些校验和的记录。

现在,如果我们将

test1
值更改为:

spring.liquibase.parameters.test1=123456789

并重新部署应用程序,Liquibase 将失败并出现校验和验证错误。

所以我建议 Liquibase 在应用属性替换之后计算 xml changeSet 的校验和。

否则(从校验和的角度来看)无论属性如何更改,changeSet 都应该与 tableName="${test1}" 保持“相同”。

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