如何修复Spring Boot项目中Liquibase升级引发的ValidationFailedException?
Liquibase升级后校验和错误的修复方案
问题原因
Liquibase 4.22版本调整了校验和计算逻辑,与4.20版本的算法存在差异,导致未修改的changeset文件计算出的校验和与数据库中存储的旧校验和不匹配,触发ValidationFailedException。
修复方法
方法一:清除旧校验和,重新生成新校验和
使用Liquibase内置的clearCheckSums命令清除数据库中存储的所有旧校验和,下次执行变更时会自动计算并存储符合新版本算法的校验和:
- 直接使用Liquibase CLI:
liquibase clearCheckSums - Maven项目:
mvn liquibase:clearCheckSums - Gradle项目:
./gradlew liquibaseClearChecksums
执行后重新运行update或其他变更命令即可。
方法二:给指定changeset添加校验和豁免
如果不想全局清除校验和,可以在单个changeSet标签中添加validCheckSum属性,指定接受旧校验和或者任意校验和:
- 接受任意校验和(适合快速解决问题,无需计算旧值):
<changeSet id="your-changeset-id" author="your-author" validCheckSum="ANY"> <!-- 原changeset内容 --> </changeSet> - 指定具体的旧校验和值(更严谨,需从报错信息中复制旧校验和字符串):
<changeSet id="your-changeset-id" author="your-author" validCheckSum="旧校验和字符串"> <!-- 原changeset内容 --> </changeSet>
方法三:临时回退校验和算法(不推荐)
Liquibase提供系统参数liquibase.checksum.algorithm可指定旧版本的校验和算法,以此临时规避问题,但该方法会影响新版本特性,不建议长期使用。示例:
liquibase --liquibase.checksum.algorithm=SHA-256 update
内容的提问来源于stack exchange,提问作者Tristate
相关产品推荐
相关产品推荐

