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

Spring Boot 3.0.2中Flyway数据库迁移文件未被识别求助

排查Flyway迁移脚本不执行的实用方案

1. 先盯紧迁移文件命名

Flyway对文件名规则卡得很严,必须严格遵循V<版本号>__<描述>.sql格式,比如V1__Create_test_table.sql:

  • 版本号得是数字,带小数点也可以(比如V1.2)
  • 版本号和描述之间必须是两个下划线,少一个都会被直接忽略
  • 别加空格或特殊字符,不然Flyway连警告都不会给,直接跳过文件

2. 确认脚本放对路径

默认情况下,Flyway只会扫描src/main/resources/db/migration目录下的脚本。如果你的脚本放在其他路径,得在application.properties里手动配置:

spring.flyway.locations=classpath:你的自定义路径

同时在IntelliJ里右键该目录,选择Mark Directory as → Resources Root,否则IDE可能不会把它当作资源文件打包。

3. 强制Gradle复制脚本到Build目录

如果IDE没自动把SQL脚本复制到build目录,直接在build.gradle里加这段配置,强制资源文件打包:

sourceSets {
    main {
        resources {
            srcDirs = ["src/main/resources"]
            include "**/*.sql"
        }
    }
}

// 给bootJar任务加个兜底配置
bootJar {
    from sourceSets.main.resources
}

执行./gradlew clean build后,去build/resources/main/db/migration目录确认脚本是否存在,没有的话就是配置还没生效。

4. 开Debug日志看真相

控制台没报错?大概率是日志级别太低,Flyway的执行细节被隐藏了。在application.properties里加一行:

logging.level.org.flywaydb=DEBUG

再启动应用或者执行./gradlew flywayMigrate,查看日志里有没有Found pending migration或Applying migration相关记录,就能明确Flyway是否识别到了你的脚本。

5. 绕开IDE直接用Gradle命令

别跟IDE较劲,直接在终端执行迁移命令,排除IDE构建问题:

./gradlew flywayMigrate -i

-i参数会输出详细执行日志,能看到Flyway是否加载到脚本、数据库连接是否正常、甚至是SQL脚本的隐性语法问题(比如SQL Server的语法兼容问题,没抛异常但执行失败)。

6. 查flyway_schema_history表实锤

直接去数据库里看flyway_schema_history表:

  • 如果有对应版本的记录但success字段为false,说明脚本执行失败,得检查SQL语法(比如SQL Server用[]包裹标识符,别用反引号)
  • 如果连对应版本的记录都没有,那就是Flyway根本没识别到脚本,回去重新检查命名和路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:33:09