Spring Boot部署Tomcat时,如何执行Flyway Repair修复哈希不匹配?
解决Tomcat部署下Spring Boot应用的Flyway哈希匹配问题
下面提供几种无需Maven就能执行Flyway Repair的方法:
方法一:通过Spring Boot代码临时执行Repair
可以在项目中添加一个仅用于修复的临时配置,利用Flyway的Java API触发repair操作:
- 创建一个带特定Profile的配置类,添加CommandLineRunner Bean:
import org.flywaydb.core.Flyway; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Profile; @Profile("flyway-repair") public class FlywayRepairConfig { @Bean public CommandLineRunner flywayRepair(Flyway flyway) { return args -> { flyway.repair(); System.out.println("Flyway repair执行完成"); }; } }
- 重新打包应用部署到Tomcat,然后修改Tomcat的启动参数,激活
flyway-repairProfile:- 找到Tomcat的
catalina.sh(Linux)或catalina.bat(Windows),添加启动参数:-Dspring.profiles.active=flyway-repair
- 找到Tomcat的
- 启动Tomcat,待应用完成repair后,停止Tomcat,移除上述配置类和启动参数,重新打包部署即可正常启动应用。
方法二:直接修改数据库的Flyway历史表
如果能直接访问应用对应的数据库,可以手动修复哈希值:
- 先备份
flyway_schema_history表,避免操作失误导致数据丢失。 - 在本地环境执行
mvn flyway:info,找到对应迁移文件的Checksum值。 - 登录服务器数据库,执行UPDATE语句,将
flyway_schema_history中对应迁移记录的checksum字段更新为本地获取到的新值:
UPDATE flyway_schema_history SET checksum = 新的哈希值 WHERE version = '对应的版本号' AND description = '迁移文件描述';
- 重启Tomcat,应用即可正常启动。
方法三:使用Flyway命令行工具
直接在服务器上使用Flyway官方的命令行工具执行repair:
- 下载对应系统的Flyway CLI包(仅需Java环境,无需Maven)。
- 解压后,修改
conf/flyway.conf配置文件,填入数据库的连接信息:
flyway.url=jdbc:mysql://localhost:3306/你的数据库名 flyway.user=数据库用户名 flyway.password=数据库密码 flyway.locations=filesystem:./sql # 指向你的迁移文件目录,可将本地迁移文件上传至服务器对应路径
- 在命令行进入Flyway CLI目录,执行:
./flyway repair # Linux/Mac # 或者 flyway repair # Windows
- 执行完成后,重启Tomcat即可。
内容的提问来源于stack exchange,提问作者Dimitris
相关产品推荐
相关产品推荐

