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

Flyway基线脚本在新机器上未执行问题求助

Flyway基线脚本(B前缀)未执行的问题排查与解决

核心原因

Flyway中B前缀的基线脚本和V前缀的版本脚本执行逻辑完全不同:

  • V脚本会在migrate操作中被自动扫描并执行,这也是Spring Boot启动时默认触发的操作。
  • B脚本仅在**flyway baseline命令执行**时才会被应用,用于初始化数据库的基线状态,默认不会被migrate触发执行。

你删除schema后重启Spring Boot,应用触发的是常规migrate流程,所以基线脚本不会被执行,而其他V脚本正常运行。

针对你的场景的解决方案

1. 新测试环境执行基线脚本

方式一:手动执行Maven命令

直接在项目根目录执行:

mvn flyway:baseline

该命令会自动执行B3_0_001__baseline_init.sql,并在schema_version表中写入基线执行记录。

方式二:Spring Boot启动时自动触发基线

在Spring Boot配置文件(如application.properties)中添加以下配置:

# 当数据库为空时自动执行基线操作
flyway.baseline-on-migrate=true
# 指定基线版本,需和脚本版本完全匹配
flyway.baseline-version=3.0.001

这样删除schema后重启应用,Flyway会先执行基线脚本完成初始化,再自动执行后续的V脚本。

2. 生产环境标记基线已执行(无需运行脚本)

直接在生产数据库的schema_version表中插入基线记录,模拟脚本已执行:

INSERT INTO schema_version (version_rank, installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success)
VALUES (1, 1, '3.0.001', 'baseline init', 'BASELINE', 'B3_0_001__baseline_init.sql', 123456789, 'your_db_user', NOW(), 0, true);
  • checksum字段的值可以从测试环境执行后的schema_version表中复制,或通过Maven命令生成:
    mvn flyway:calculateChecksum -Dflyway.script=B3_0_001__baseline_init.sql
    
  • 替换your_db_user为生产环境的数据库用户。

3. 后续清理

确认测试环境基线执行完成、生产环境标记完成后,删除旧的版本脚本即可。

注意事项

  • 不要将B脚本改为V脚本,这会导致后续migrate操作重复执行该脚本(若未正确标记基线),破坏版本控制逻辑。
  • 确保flyway.baseline-version的配置值和脚本版本严格对应(3.0.001对应B3_0_001)。
  • 该方案适配Flyway Teams 8.5.9版本,与你使用的版本完全兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:09:56