You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot部署Tomcat时,如何执行Flyway Repair修复哈希不匹配?

解决Tomcat部署下Spring Boot应用的Flyway哈希匹配问题

下面提供几种无需Maven就能执行Flyway Repair的方法:

方法一:通过Spring Boot代码临时执行Repair

可以在项目中添加一个仅用于修复的临时配置,利用Flyway的Java API触发repair操作:

  1. 创建一个带特定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执行完成");
        };
    }
}
  1. 重新打包应用部署到Tomcat,然后修改Tomcat的启动参数,激活flyway-repair Profile:
    • 找到Tomcat的catalina.sh(Linux)或catalina.bat(Windows),添加启动参数:-Dspring.profiles.active=flyway-repair
  2. 启动Tomcat,待应用完成repair后,停止Tomcat,移除上述配置类和启动参数,重新打包部署即可正常启动应用。

方法二:直接修改数据库的Flyway历史表

如果能直接访问应用对应的数据库,可以手动修复哈希值:

  1. 先备份flyway_schema_history表,避免操作失误导致数据丢失。
  2. 在本地环境执行mvn flyway:info,找到对应迁移文件的Checksum值。
  3. 登录服务器数据库,执行UPDATE语句,将flyway_schema_history中对应迁移记录的checksum字段更新为本地获取到的新值:
UPDATE flyway_schema_history 
SET checksum = 新的哈希值 
WHERE version = '对应的版本号' AND description = '迁移文件描述';
  1. 重启Tomcat,应用即可正常启动。

方法三:使用Flyway命令行工具

直接在服务器上使用Flyway官方的命令行工具执行repair:

  1. 下载对应系统的Flyway CLI包(仅需Java环境,无需Maven)。
  2. 解压后,修改conf/flyway.conf配置文件,填入数据库的连接信息:
flyway.url=jdbc:mysql://localhost:3306/你的数据库名
flyway.user=数据库用户名
flyway.password=数据库密码
flyway.locations=filesystem:./sql  # 指向你的迁移文件目录,可将本地迁移文件上传至服务器对应路径
  1. 在命令行进入Flyway CLI目录,执行:
./flyway repair  # Linux/Mac
# 或者
flyway repair    # Windows
  1. 执行完成后,重启Tomcat即可。

内容的提问来源于stack exchange,提问作者Dimitris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:05:12