spring boot 集成 flyway 实现数据库版本迁移只需三步:添加 flyway-core 依赖、配置 application.yml 中的扫描路径与行为参数、编写符合 v+版本号__描述.sql 规范的 sql 脚本;flyway 启动时自动执行并记录于 flyway_schema_history 表,确保结构一致、可追溯、不重复。

Spring Boot 集成 Flyway 实现数据库版本迁移,核心就三步:加依赖、配路径、写脚本。Flyway 启动时自动扫描并按序执行 SQL 文件,同时用 flyway_schema_history 表记录执行状态,确保每次部署结构一致、可追溯、不重复。
添加 Flyway 依赖
在 pom.xml 中引入 flyway-core,无需额外配置类——Spring Boot 2.5+ 自带自动装配支持:
- 使用 Maven(推荐最新稳定版,如
9.22.3或10.12.0):
注意:不需要单独配数据源驱动(如 MySQL 或 PostgreSQL),Flyway 会复用 spring.datasource 的连接配置。
配置 Flyway 扫描路径和行为
在 application.yml 中设置关键参数,常见且实用的配置如下:
-
启用 Flyway:
spring.flyway.enabled: true(默认为 true,显式声明更清晰) -
指定脚本位置:
spring.flyway.locations: classpath:db/migration(默认值,可不写;若自定义目录需明确指定) -
首次启动有旧库无历史表时:
spring.flyway.baseline-on-migrate: true(自动创建 baseline 记录,避免报错) -
跳过校验(开发阶段常用):
spring.flyway.validate-on-migrate: false(防止修改已执行脚本后启动失败) -
关闭路径检查(避免空目录报错):
spring.flyway.check-location: false
编写符合规范的迁移脚本
脚本必须放在 src/main/resources/db/migration/ 下,命名严格遵循规则:
- 前缀
V表示版本化迁移(只执行一次),如V1__init_user_table.sql - 版本号可含点或下划线(
V1.0.1、V2__add_index),按字典序升序执行 - 双下划线
__分隔版本与描述,描述中下划线会被转为空格显示 - 后缀必须是
.sql(Java 类型脚本较少用,不建议新手尝试) - 示例内容(创建用户表并插入初始数据):
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
email VARCHAR(128)
);
INSERT INTO user (username, email) VALUES ('admin', 'admin@example.com');
验证与日常维护要点
启动应用后,可快速确认是否生效:
- 查看控制台日志:出现
Successfully validated 1 migration和Current version of schema `xxx`: 1即成功 - 检查数据库:确认生成了
flyway_schema_history表,并有一条V1记录 - 后续新增变更:只需新增
V2__alter_user_add_phone.sql,重启即自动执行 - 禁止修改已执行的 V 脚本(checksum 校验会失败),如需调整,应新建 V3
- 生产环境慎用
clean命令(清空全部表),仅限本地或测试环境排障











