一、版本适配说明
适配主流环境:
- springboot 2.x / 3.x
- mysql 8.x / postgresql
- flyway 社区版(免费、够用)
核心优势:零代码侵入、自动迁移、数据库脚本版本化、杜绝环境不一致
二、引入 maven 依赖
springboot3 无需指定版本,父工程已托管;springboot2 同样兼容。
<!-- flyway 核心包 --> <dependency> <groupid>org.flywaydb</groupid> <artifactid>flyway-core</artifactid> </dependency> <!-- mysql 驱动(根据自己项目选择) --> <dependency> <groupid>com.mysql</groupid> <artifactid>mysql-connector-j</artifactid> <scope>runtime</scope> </dependency>
三、生产级 yaml 完整配置(重点)
适配新项目 + 老项目已有数据库,可直接上线使用,杜绝误删、报错、校验失败等问题。
spring:
# 数据库配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/test_db?useunicode=true&characterencoding=utf-8&servertimezone=asia/shanghai&allowmultiqueries=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.driver
# flyway 生产配置
flyway:
# 开启flyway
enabled: true
# sql脚本存放路径
locations: classpath:db/migration
# 编码
encoding: utf-8
# 迁移前校验脚本完整性(防止已执行脚本被篡改)
validate-on-migrate: true
# 【老项目必备】已有数据库自动生成基线,不会重复执行旧脚本
baseline-on-migrate: true
# 基线版本号(默认即可,无需修改)
baseline-version: 1
# 生产环境禁用clean(极其重要,防止清空数据表)
clean-disabled: true
# 关闭默认占位符替换(避免sql中${}被解析报错)
placeholder-replacement: false
# 不自动修复,严格模式
repair-on-migrate: false
# 日志输出迁移详情
loggers: slf4j四、目录规范(强制统一)
必须在 resources 下创建固定目录:db/migration
完整目录结构:
resources └── db └── migration ├─ v1__init_database.sql ├─ v2__create_user_table.sql ├─ v3__add_user_column.sql └─ r__refresh_view.sql
五、脚本命名规范(严格遵守)
1. 版本迁移脚本(v开头)
格式:v版本号__描述.sql(两个下划线)
特点:执行一次永久生效,不会重复执行,执行后禁止修改内容
示例:
- v1__init_table.sql
- v2__add_index.sql
- v3__update_data.sql
2. 重复执行脚本(r开头)
格式:r__功能描述.sql
特点:每次项目启动都会执行,适用于:视图、存储过程、函数、常量数据初始化
示例:r__user_stat_view.sql
六、新旧项目落地方案
场景1:全新项目(空数据库)
1. 新建 v1__init.sql 写入建库、建表语句
2. 启动项目,flyway 自动:
- 创建 flyway_schema_history 历史表
- 自动执行所有未执行的 v 开头脚本
场景2:老项目(已有数据表,无flyway历史)
依靠配置 baseline-on-migrate: true 自动处理:
1. 启动项目,flyway 检测到已有表,自动打基线:将当前数据库状态标记为 v1 版本
2. 后续新增脚本从 v2、v3 开始,不会重复执行旧 sql
3. 完美兼容存量数据库,无需手动改表、导数据
七、常用调试命令(开发必备)
可通过 idea 插件 / maven 命令执行
# 查看迁移状态 mvn flyway:info # 执行迁移(手动触发) mvn flyway:migrate # 修复异常记录 mvn flyway:repair # 清空数据库(仅本地开发!生产绝对禁用) mvn flyway:clean
八、生产强制约束(避坑核心)
- 已执行的 v 脚本绝对不能修改:修改会校验失败,需要变更直接新建高版本脚本
- 生产环境永远开启 clean-disabled: true,禁止清空库
- 社区版无回滚功能,回滚逻辑通过新脚本反向操作实现
- 所有库表变更必须提交脚本,禁止线上手动改库
- 脚本中禁止写业务查询 sql,只保留 ddl/dml 结构变更
九、常见报错解决
1. validate failed: migration checksum mismatch
原因:已执行的脚本被修改
解决:本地删除修改,新增新版本脚本;测试环境可执行 flyway:repair
2. found non-empty schema with no metadata table
原因:已有旧数据库无flyway记录
解决:开启 baseline-on-migrate: true 自动基线
以上就是springboot集成flyway的完整生产方案的详细内容,更多关于springboot集成flyway方案的资料请关注代码网其它相关文章!
发表评论