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

Spring Boot集成FlyWay SQL脚本未生效问题求助

排查方向及解决办法

1. 数据库Schema大小写不匹配

你的配置存在大小写不一致的问题:

  • 数据源URL指定的数据库是testFlyWay(驼峰格式)
  • Flyway的schemas配置是testflyway(全小写)

MySQL在Linux/macOS环境下默认区分数据库名大小写,若数据库实际为testFlyWay,Flyway会找不到指定的testflyway schema,导致迁移脚本被跳过。而flyway_schema_history表是创建在URL指定的默认库(testFlyWay)中,所以你能看到这张表,但脚本未执行。

解决:
统一所有配置的大小写,修改YML配置中的schemas为testFlyWay:

spring:
  flyway:
    schemas: testFlyWay

同时删除SQL脚本中的use testflyway;语句——Flyway已通过schemas指定目标库,无需手动切换。

2. 基线版本与脚本版本的逻辑冲突

你设置了baseline-version: 1,Flyway启动时会将当前数据库状态标记为基线版本1。正常情况下V2.0.0的脚本应被执行,若未执行,可检查:

  • 应用启动日志中是否有Flyway相关提示,比如是否出现Found new migration或脚本被忽略的信息
  • 脚本文件名是否严格符合规范:必须是V<版本号>__<描述>.sql(注意是两个下划线,不能省略)

3. 脚本执行失败未被正确记录

若脚本执行出错(比如use testflyway找不到对应库),Flyway会在flyway_schema_history表中添加失败记录。可查看该表的success字段,确认是否存在失败的迁移记录。

解决:
去掉脚本中多余的use语句,修改后的SQL脚本如下:

CREATE TABLE `sys_user`
(
    `user_id`         int(10) unsigned NOT NULL AUTO_INCREMENT,
    `username`        varchar(1024)    NOT NULL unique ,
    `encode_password` varchar(1024)    NOT NULL,
    `age`             int(3)           NOT NULL,
     PRIMARY KEY (`user_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

insert into `sys_user` values (1,'Felordcn','{noop}12345',18);

4. 脚本扫描路径验证

确认脚本是否被正确打包到classpath中:

  • 查看target/classes/db/migration目录下是否存在你的SQL脚本
  • 执行mvn clean package后,解压jar包检查BOOT-INF/classes/db/migration路径下是否有脚本

总结

最可能的原因是数据库Schema大小写不匹配,先统一URL、Flyway配置和脚本中的数据库名大小写,去掉脚本里的use语句后重启应用。若问题仍存在,查看Flyway启动日志定位具体扫描或执行异常信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:50:28