Spring Boot测试环境Flyway迁移脚本执行顺序异常求助
解决Flyway迁移脚本执行顺序问题
第一步:修正脚本命名规范
Flyway要求迁移脚本必须遵循V<版本号>__<描述>.sql格式(版本号与描述之间是两个下划线),否则会导致版本号解析错误,打乱执行顺序。
将你的脚本重命名:
- main/resources/db/migration下的脚本改为
V1_0__db_script.sql - test/resources/db/data-sql下的脚本改为
V0_9__sql_db_script.sql(降低版本号确保优先执行) - test/resources/db/data-test下的脚本改为
V1_0__test_db_script.sql
第二步:修正Spring Boot配置的大小写
YAML配置对大小写敏感,Spring Boot的Flyway配置前缀必须是小写的flyway,而非Flyway。修改application-test.yml:
flyway: enabled: true schemas: scheme_one, scheme_second # 同时指定两个schema,避免脚本执行时找不到目标schema locations: - classpath:/db/data-sql - classpath:/db/migration - classpath:/db/data-test
第三步:确保执行顺序符合预期
Flyway的核心执行逻辑是按版本号升序执行所有扫描到的脚本,调整版本号后:
- 版本号为
0.9的data-sql脚本会最先执行 - 接着执行版本号为
1.0的main目录脚本 - 最后执行同版本号的data-test脚本(若需确保它在main脚本之后,也可将其版本号设为
V1_1__test_db_script.sql)
额外优化建议
- 针对跨schema的脚本,在脚本开头显式指定目标schema,比如
USE scheme_second;,避免因默认schema(scheme_one)导致执行错误。 - 若不想调整版本号,可给不同目录的脚本设置递进的版本号,比如data-sql用
V1_0__xxx.sql、main下用V1_1__xxx.sql、data-test用V1_2__xxx.sql,严格按版本号顺序执行。
内容的提问来源于stack exchange,提问作者Ronak Joshi
相关产品推荐
相关产品推荐

