前言
在项目中,经常会进行版本的升级。在版本升级时,就会牵扯到数据库的升级。 平时可能我们有一个文件系统保存SQL脚本,需要升到哪个版本就执行对应的SQL脚本。这样很麻烦,并且容易出错。
Flyway
是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。
用通俗的话讲,Flyway
可以像Git管理不同人的代码那样,管理不同人的SQL脚本,从而做到数据库同步。
具体实现
Maven依赖
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.0.8</version>
</dependency>
</dependencies>
插件依赖:
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>6.0.8</version>
</plugin>
</plugins>
文件位置
SQL文件存放的目录默认为:db/migration
也可以通过配置spring.flyway.locations=classpath:db/migration
修改。
命名规范
SQL文件命名规范:前缀 + 版本号 + 双下划线 + 描述 + 后缀
也可以通过配置对命名规范进行修改,如下:
spring:
flyway:
# 前缀,默认V
sql-migration-prefix: V
# 文件分隔符,默认__
sql-migration-separator: __
# 后缀,默认.sql
sql-migration-suffixes: .sql
版本号可以使用如下结构:
- 1
- 001
- 5.2
- 1.2.3.4.5.6.7.8.9
- 205.68
- 20200616113556
- 2020.6.16.11.35.56
- 2020.06.16.11.35.56
SQL文件
SQL文件里的内容就是需要更新的SQL脚本。比如:
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
`account` VARCHAR (40) NOT NULL COMMENT '用户名',
`password` VARCHAR (255) NOT NULL COMMENT '密码',
`nickname` VARCHAR (60) DEFAULT NULL COMMENT '昵称',
`email` VARCHAR (40) DEFAULT NULL COMMENT '邮箱',
`phone` VARCHAR (11) DEFAULT NULL COMMENT '电话',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_user` VARCHAR (11) DEFAULT NULL COMMENT '创建人',
`modify_time` datetime DEFAULT NULL COMMENT '修改时间',
`modify_user` VARCHAR (11) DEFAULT NULL COMMENT '修改人',
PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4;
启动项目
添加Maven配置和SQL脚本后,即可启动项目。
若启动成功,则出现如下信息:
查看数据库,生成了flyway-schema-history表,该表用于记录执行的SQL信息。如下:
该表名可以通过配置spring.flyway.table=flyway_schema_history
修改。
除该表外还执行了配置的SQL脚本,生成了业务表,如下:
若初始数据库非空,则会出现如下错误:
可以通过配置spring.flyway.baseline-on-migrate=true
,将当前的数据库结构设为基线版本,SQL脚本在基线版本上执行。
常用配置
spring:
flyway:
# 开启flyway
enabled: true
# 数据库非空时,是否执行基线
baseline-on-migrate: false
# 执行基线版本号
baseline-version: 1
# 校验SQL文件是否存在
check-location: true
# SQL文件位置
locations: classpath:db/migration
# SQL文件前缀
sql-migration-prefix: V
# SQL文件分隔符
sql-migration-separator: __
# SQL文件后缀
sql-migration-suffixes: .sql
# 记录表名称
table: flyway_schema_history
# 目标版本
target:
总结
至此,我们成功的通过Flyway
对数据库版本进行管理。
感谢阅读,如果感觉有帮助的话,不妨随手点个赞!