
Spring Boot 集成 Flyway,数据库也能做版本控制
今天这篇文章介绍一下数据库的版本管理、迁移工具Flyway
什么是Flyway? 要解决什么问题?
Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。
Flyway支持SQL和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flyway来管理这些脚本的执行,这些脚本被Flyway称之为migration。
“
PS: 本质上和liquibase机制一致。
”
按照verion的顺序(和数据库中的更新记录对比,找到未更新的),更新如下
更新记录如下
Flyway中的变迁(migrations)
“
对于Flyway,对数据库的所有更改都称为变迁(migrations),等同于liquibase中的changeset。
”
在Flyway中变迁(migrations)定义的更细,包含如下三种:
- 版本变迁(Versioned Migrations): 每个版本执行一次,包含有版本、描述和校验和;常用于创建,修改,删除表;插入,修改数据等
- 撤销变迁(Undo Migrations): 版本变迁(Versioned Migrations)的反操作。关注公众号:“码猿技术专栏”,回复关键词:“081” 获取阿里内部Spring Cloud Alibaba 教程!
- 可重复变迁(Repeatable Migrations): 可以执行多次,包含描述和校验和(没有版本);主要用于视图,存储过程,函数等
这三种类型对应的格式如下:
- 前缀: V 代表版本变迁(Versioned Migrations), U 代表撤销变迁(Undo Migrations), R 代表可重复变迁(Repeatable Migrations)
- 版本号: 唯一的版本号,比如V1.0.1
- 分隔符: __ (两个下划线)
- 描述信息: 描述信息
- 后缀: .sql
(PS:撤销变迁(Undo Migrations)在收费版本中)
Flyway中常用命令
“
Flyway中的常用commands有哪些?什么含义?
”
Migrate: 是Flyway工作流的核心。它将扫描文件系统或类路径以查找可用的Migrate。它将把它们与已应用于数据库的Migrate进行比较。如果发现任何差异则迁移数据。
Clean: 清除掉对应数据库Schema中所有的对象,包括表结构,视图,存储过程等,clean操作在dev 和 test阶段很好用;(PS:不能用在product环境)
Info: 用于打印所有的Migrations的详细和状态信息,也是通过MetaData和Migrations完成的,可以快速定位当前的数据库版本;
Validate: 验证以及apply的Migrations是否有变更,默认开启的;原理是对比MetaData表与本地Migrations的checkNum值,如果值相同则验证通过,否则失败。
Undo: Migrate的反操作, 即回滚操作,这是收费功能
BaseLine:对已经存在数据库Schema结构的数据库一种解决方案。实现在非空数据库新建MetaData表,并把Migrations应用到该数据库;也可以应用到已有表结构的数据库中也可以实现添加Metadata表。
Repair:repair操作能够修复metaData表,该操作在metadata出现错误时很有用
简单示例
“
这里主要介绍基于SpringBoot集成flyway来管理数据库的变更。
”
POM依赖
Maven 包的依赖,主要包含mysql驱动, JDBC(这里spring-boot-starter-data-jpa包含了jdbc包,当然直接引入jdbc包也行),以及flyway包。
yml配置
“
SpringBoot AutoConfig默认已经包含了对flyway的配置,在spring.flyway配置下
”
在开发时,更多的配置可以从如下SpringBoot AutoConfig中找到。
Migrate配置
这里我们准备两个Versioned Migration
- V1.0__Init_DB.sql
- V1.1__Init_Data.sql
测试
启动springBootApplication, 我们可以看到如下log
生成的flyway更新的记录,test_db_flyway
.flyway_schema_history
已经user表结构和数据
本文转载自公众号:码猿技术专栏
