(十四)从零搭建后端框架——数据库版本管理工具Flyway

759 阅读3分钟

前言

在项目中,经常会进行版本的升级。在版本升级时,就会牵扯到数据库的升级。 平时可能我们有一个文件系统保存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对数据库版本进行管理。

感谢阅读,如果感觉有帮助的话,不妨随手点个赞!

源码

github.com/zhuqianchan…

往期回顾