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

Flyway无法定位加载SQL脚本,Spring Boot数据库迁移失败

Spring Boot启动后Flyway SQL脚本未加载,仅生成空的flyway_schema_history表

启动Spring Boot应用后,SQL脚本未加载到数据库,仅创建了一张空的flyway_schema_history表。以下是关键信息及排查解决步骤:


关键信息

  • 脚本存放路径:项目脚本位于resources/db/migration目录
  • 示例脚本(V1__create_invoice.sql)内容:
create table invoice
(
    id          bigint        not null auto_increment PRIMARY KEY,
    name        varchar(255)  not null,
    price       decimal(9, 2) not null,
);
  • Flyway配置:
spring.flyway.baselineOnMigrate=true
spring.flyway.locations=classpath:resources/db/migration
spring.flyway.enabled=true
  • 数据库连接配置:
spring.datasource.url=jdbc:mysql://${DATABASE_URL:localhost}:${DATABASE_PORT:3306}/${DATABASE_NAME:public}?useUnicode=true&serverTimezone=UTC
spring.datasource.username=${DATABASE_USERNAME:root}
spring.datasource.password=${DATABASE_PASSWORD:password}
  • 已尝试操作:修改脚本路径为classpath:db/migration或classpath:db.migration,问题仍未解决

排查与解决步骤

  1. 修正Flyway路径配置
    resources是classpath的根目录,配置中无需重复添加。正确路径应为:
spring.flyway.locations=classpath:db/migration
  1. 修复脚本语法错误
    脚本最后一行的price字段后多了一个逗号,会导致MySQL语法执行失败。修正后的脚本:
create table invoice
(
    id          bigint        not null auto_increment PRIMARY KEY,
    name        varchar(255)  not null,
    price       decimal(9, 2) not null
);
  1. 验证脚本命名规范
    Flyway要求脚本名必须遵循V<版本号>__<描述>.sql格式(注意是两个下划线分隔版本和描述),你的脚本命名符合规范,但需确认无拼写错误。

  2. 开启Flyway debug日志
    添加日志配置查看执行细节,定位具体报错:

logging.level.org.flywaydb=DEBUG

启动应用后检查控制台日志,确认Flyway是否扫描到脚本、执行时是否有异常。

  1. 确认数据库连接有效性
    检查URL中的${DATABASE_NAME:public},MySQL默认不存在public数据库,需替换为实际存在的数据库名称,并确保应用账号拥有该库的读写权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:25:16