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
相关产品推荐
相关产品推荐

