如何禁用Flyway生成DELETE类型迁移,避免版本切换后迁移重复执行报错?
问题根因
该行为是Flyway默认的迁移一致性校验逻辑导致的:当Flyway启动时会扫描当前类路径下的所有迁移脚本,和flyway_schema_history表中已执行的记录做对比,如果发现有已经执行过的脚本在当前类路径下不存在,默认会标记该脚本为DELETED状态,后续重新检测到该脚本时会判定为未执行,触发重复执行逻辑导致报错。
解决方案
你可以通过修改Flyway配置,忽略缺失的已执行迁移,即可禁用DELETED类型记录的生成,不同场景配置写法如下:
Spring Boot项目配置
- properties格式(application.properties):
spring.flyway.ignore-missing-migrations=true
- yaml格式(application.yml):
spring: flyway: ignore-missing-migrations: true
命令行运行Flyway
flyway -ignoreMissingMigrations=true migrate
Maven插件配置
在pom.xml的Flyway插件配置节点中添加如下配置:
<configuration> <ignoreMissingMigrations>true</ignoreMissingMigrations> </configuration>
历史异常数据修复
如果你的flyway_schema_history表中已经生成了DELETED类型的记录,直接手动删除这条异常记录后,再启动2.0版本的项目即可正常运行,无需修改已创建的业务表。
内容的提问来源于stack exchange,提问作者Andrei Yusupau
相关产品推荐
相关产品推荐

