文章时效性提示
这是一篇发布于 79 天前的文章,部分内容可能已过时。
flyway版本控制
SpringBoot项目通过flyway对sqlite进行版本控制,以及flyway原理
Spring Boot 使用 Flyway 管理 SQLite 数据库版本
为什么要使用 Flyway?
解决的问题:
- 客户端开发,修改数据库等操作重复执行问题
- 数据库版本混乱:团队开发中多人修改数据库结构导致版本不一致
- 手动维护困难:人工记录和执行 SQL 脚本易出错
- 环境差异:开发、测试、生产环境的数据库结构不同步
- 回滚困难:缺乏结构化的版本回退机制
使用 Flyway 可以很方便的处理数据库表结果、数据的版本迁移,使用简单、自动化,大大提高生产力,再也不需要手工在控制台进行,那样更容易出错或者遗漏,毕竟人都是会经常犯错的。
Flyway 工作原理
核心机制
1 |
|
核心概念
迁移脚本:命名规则 V{版本号}__{描述}.sql(如 V1__Create_user_table.sql)
元数据表:flyway_schema_history(记录迁移历史、校验和、执行时间)
校验和:对 SQL 文件内容计算哈希值,防止意外修改
版本顺序:严格按版本号顺序执行迁移(不支持版本跳跃)
使用方法(Spring Boot + SQLite)
添加依赖
1 |
|
配置 Flyway
1 |
|
创建迁移脚本
1 |
|
操作注意事项
开发阶段
脚本命名:必须使用双下划线 __(单下划线会导致识别失败)
脚本修改:已执行的脚本禁止修改内容(校验和会变化导致失败)
测试验证:执行 mvn flyway:info 查看迁移状态
生产环境
备份先行:执行迁移前必须备份数据库
禁用 clean:禁止配置 flyway.clean-on-validation-error=true
版本顺序:必须按版本号顺序执行(不可跳过中间版本)
SQLite 特殊限制
不支持 DDL 事务:CREATE TABLE / ALTER TABLE 无法回滚
列修改限制:需通过新建表迁移数据实现 ALTER TABLE
并发控制:SQLite 写操作串行化,避免多服务同时迁移
常用命令
命令 | 作用 |
---|---|
mvn flyway:migrate | 执行所有未应用的迁移 |
mvn flyway:info | 查看当前迁移状态 |
mvn flyway:validate | 验证迁移脚本是否可应用 |
mvn flyway:repair | 修复元数据表(校验和错误时使用) |
flyway版本控制
https://zhyyao.me/2025/01/16/experience/spring_flyway_helper/