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

Spring Boot集成Flyway时嵌入式H2数据库不执行迁移脚本问题

解决Spring Boot + Flyway + H2迁移脚本未执行的问题

我来帮你一步步排查这个问题,Flyway迁移脚本没执行通常是路径、命名或者配置的小细节出了问题,咱们逐个确认:

1. 检查迁移脚本的存放路径与命名规范

Flyway默认只会扫描src/main/resources/db/migration目录下的脚本,先确认你的V2__create_shipwr...脚本是不是放在这个标准路径里。

另外,命名必须严格遵循Flyway的规则:

  • 前缀是大写的V
  • 版本号后面跟两个下划线(不是单个下划线)
  • 最后是描述文本和.sql后缀
    比如正确的命名应该是V2__create_shipwreck_table.sql,如果下划线数量不对、版本号格式错误,Flyway会直接忽略这个脚本。

2. 完善Flyway的配置项

你的配置里已经加了spring.flyway.baseline-on-migrate=true,这没问题,但可以补充两个更稳妥的配置:

# 显式开启Flyway(默认是true,但显式声明避免被其他配置意外覆盖)
spring.flyway.enabled=true
# 开启Flyway的DEBUG日志,方便查看脚本扫描和执行的详细过程
logging.level.org.flywaydb=DEBUG

启动应用后,查看日志里是否有类似Found SQL migration: db/migration/V2__xxx.sql的记录:

  • 如果没有,说明脚本没被扫描到,重点检查路径和命名
  • 如果有但没执行,看日志里的基线版本、迁移历史表的状态信息

3. 查看Flyway的迁移历史表

启动应用后,打开H2控制台(访问http://localhost:8181/h2,用你配置的jdbc:h2:mem:testdb连接),查看是否存在flyway_schema_history表:

  • 如果这个表不存在,说明Flyway根本没初始化,要确认项目里已经引入了Flyway的Spring Boot starter依赖
  • 如果表存在,查看里面的version和success字段,看V2版本是不是已经被标记为执行成功,或者有没有报错信息

4. 排除其他配置冲突

你已经设置了spring.jpa.hibernate.ddl-auto=none,这个非常关键,避免了Hibernate自动生成表干扰Flyway的操作,这部分没问题。另外,确认没有设置spring.flyway.locations修改默认的脚本扫描路径,如果改了的话,要确保脚本路径和配置完全匹配。

最后建议

先从脚本的路径和命名入手排查,这是最常见的问题;然后开启Flyway的DEBUG日志,从日志里找具体的扫描和执行细节,很快就能定位到问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:53:27