在系统实际运行过程中,可能会突然抛出一个典型的 Flyway 校验失败异常,具体错误信息如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed: Migration checksum mismatch for migration version 1.0.0.01-> Applied to database : 1062144176-> Resolved locally : 1432425380

错误信息非常明确:迁移版本 1.0.0.01 的校验和(checksum)出现了不一致——数据库中记录的值是 1062144176,而本地解析后得到的值是 1432425380。简单来说,就是有人或某次构建无意中修改了已经执行过的迁移脚本,导致 Flyway 检测到脚本内容与历史记录不符,从而拒绝继续执行后续迁移。
针对这类 Flyway 校验失败问题,常见的处理方式之一就是强制“修复”校验和。例如,可以尝试运行以下命令:
> mvn flyway:migrate
但需要特别注意的是,直接执行 flyway:migrate 遇到校验失败时并不会自动跳过——它依然会卡在 validate 阶段。如果需要绕过校验并重新对齐记录,通常需要借助 flyway:repair 命令来清除失败的校验记录,或者手动调整 flyway_schema_history 表中的 checksum 字段。当然,在执行这些操作之前,务必确保对脚本的改动是安全的,不会破坏已有的数据逻辑或业务完整性。
