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,问题仍未解决
排查与解决步骤
- 修正Flyway路径配置
resources是classpath的根目录,配置中无需重复添加。正确路径应为:
spring.flyway.locations=classpath:db/migration
- 修复脚本语法错误
脚本最后一行的price字段后多了一个逗号,会导致MySQL语法执行失败。修正后的脚本:
create table invoice ( id bigint not null auto_increment PRIMARY KEY, name varchar(255) not null, price decimal(9, 2) not null );
验证脚本命名规范
Flyway要求脚本名必须遵循V<版本号>__<描述>.sql格式(注意是两个下划线分隔版本和描述),你的脚本命名符合规范,但需确认无拼写错误。开启Flyway debug日志
添加日志配置查看执行细节,定位具体报错:
logging.level.org.flywaydb=DEBUG
启动应用后检查控制台日志,确认Flyway是否扫描到脚本、执行时是否有异常。
- 确认数据库连接有效性
检查URL中的${DATABASE_NAME:public},MySQL默认不存在public数据库,需替换为实际存在的数据库名称,并确保应用账号拥有该库的读写权限。
内容的提问来源于stack exchange,提问作者diho472
相关产品推荐
相关产品推荐

