如何基于Spring Profiles按prod/dev环境运行Flyway脚本及配置多环境脚本?
Flyway多环境迁移脚本配置方案
Flyway完全支持针对prod、dev等不同环境运行差异化的迁移脚本,同时也能实现公共脚本与环境专属脚本的分离执行,具体方案如下:
- 区分环境运行不同脚本:核心通过Flyway的
locations配置参数实现,结合环境专属的配置文件或环境变量,指定对应环境需要加载的脚本路径。 - 创建dev专属脚本文件夹:可以单独创建如
db/migration/dev的目录存放dev专属数据脚本,仅在dev环境的Flyway配置中添加该路径,prod环境配置则排除此路径,这样dev脚本只会在dev环境加载执行。 - 公共脚本文件夹实现共用:建议创建
db/migration/common作为公共脚本目录,将dev和prod共用的脚本放在这里。不管是dev还是prod环境,都把这个公共路径加入locations配置,公共脚本会和当前环境的专属脚本按文件名排序一同执行。
具体配置示例
dev环境配置文件(flyway-dev.properties)
flyway.locations=filesystem:db/migration/common,filesystem:db/migration/dev flyway.url=jdbc:mysql://localhost:3306/dev_db flyway.user=dev_user flyway.password=dev_pass
prod环境配置文件(flyway-prod.properties)
flyway.locations=filesystem:db/migration/common flyway.url=jdbc:mysql://prod-host:3306/prod_db flyway.user=prod_user flyway.password=prod_pass
执行命令示例
- 运行dev环境迁移:
flyway -configFiles=flyway-dev.properties migrate
- 运行prod环境迁移:
flyway -configFiles=flyway-prod.properties migrate
注意:所有迁移脚本需遵循Flyway的命名规范(如V1__Create_table.sql),版本号要统一规划,避免公共脚本与专属脚本的执行顺序混乱。
内容的提问来源于stack exchange,提问作者Mirza Adeel
相关产品推荐
相关产品推荐

