如何修复 liquibase 校验和中的 ValidationFailedException?

How to fix ValidationFailedException in liquibase checksum?

我在 spring 启动时使用 liquibase。我有 SQL 个变更集。我没有更改 liquibase SQL 脚本中的任何内容。但我遇到了以下错误

Error creating bean with name 'liquibase' defined in class path resource: Invocation of init method failed; nested exception is liquibase.exception.ValidationFailedException: Validation Failed:\r\n 1 change sets check sum\r\n
liquibase/db/0001_sample.sql::sample1_2::admin was: 8:600cf084d9c1ea85df2ddaa4f7a8a309 but is now: 8:47d241e6e1636203501ec72cafe4e5b6\r\n", "class": "org.springframework.beans.factory.BeanCreationException",

下面是我的0001_table1.sql

--liquibase formatted sql
--changeset admin:sample1_1
create table....
--rollback DROP TABLE tablename

--changeset admin:sample1_2
add column....

我认为这是由于格式从我的 IDE 更改为另一个 ide。但我喜欢修复它。我不是在寻找清除校验和。请建议将普通 SQL 与 liquibase 一起使用时如何处理。

注意: 我看过 xml 版本的示例,但我正在寻找 SQL 和 liquibase.

是的,你真的不能那样做。应用变更集后,它会在配置数据库中记录校验和,任何更改(甚至是空格)都会导致此验证错误。如果您使用 Maven 或 gradle,您可以清除校验和,它们将在下一个 运行 通过使用 liquibase 插件上的 clearChecksums 目标重新计算。

你应该密切注意,当你使用 SQL 选项时(我认为是通过 <include file="),它不会区分空白的校验和,所以可能还有你不知道的其他差异看到。如果您确信更改无关紧要,请添加

--validCheckSum 8:47d241e6e1636203501ec72cafe4e5b6

到 SQL 文件的 header,这将告诉 liquibase 即使原始校验和计算为 8:600cf084d9c1ea85df2ddaa4f7a8a3098:47d241e6e1636203501ec72cafe4e5b6 也是有效校验和对于这个文件。

一些好的建议是使用您的 RCS 更严格地控​​制这些文件,否则您将一直为此而苦恼。