Spring Boot + Flyway 管理数据库版本

Flyway 介绍

Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。
Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

Spring Boot 整合 Flyway

引入依赖

在 Spring Boot 项目中引入 Flyway 相关 Maven 依赖:

<dependency>
    <groupId>org.flywaydbgroupId>
    <artifactId>flyway-coreartifactId>
    <version>6.1.0version>
dependency>

注意,如果 flyway-core 的依赖版本在 6.0 以上时,spring-boot-starter-parent 的版本需要在 2.2 以上,例如:

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.2.2.RELEASEversion>
    <relativePath/>
parent>

如果 spring-boot-starter-parent 版本在 2.2 以下的,那么在启动项目时会报如下错误:

ClassNotFoundException: org.flywaydb.core.api.callback.FlywayCallback

MySQL 版本

注意 MySQL 版本必须在 5.7 以上,否则在启动项目时会报 MySQL 版本过低的错误。

添加版本化 SQL

在项目的 src/main/resources 下创建 db/migration 目录,该目录下放置需要数据迁移的文件。
数据迁移文件名称格式为:V1.1__DoSomething.sql
注意,版本和文件名之间是两个下划线。
分别创建三个 sql 文件:

  1. V1.0__CreateUser.sql
    DROP TABLE IF EXISTS jira_user;
    CREATE TABLE `jira_user` (
      `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `user_name` varchar(20) NOT NULL COMMENT '姓名',
      `age` int(5) DEFAULT NULL COMMENT '年龄',
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
  2. V1.1__ModifyUser.sql
    alter table jira_user modify column user_name varchar(30);
    
  3. V1.2__InsertUsers.sql
    insert into jira_user values (1, 'Jake Weng', 27);
    insert into jira_user values (2, 'Heather Wen', 27);
    

查看数据库

启动上面建立好的 Spring Boot 项目,查看 MySQL 数据库,会发现数据库中多了 flyway_schema_history 和 jira_user 两张表。
查看 flyway_schema_history,可以观察到 sql 的历史版本:
在这里插入图片描述
查看 jira_user,可以查看到在 V1.3 中插入的数据:
在这里插入图片描述

参考博客

  1. Flyway 简单入门教程
  2. Spring Boot 2 实战:使用 Flyway 管理你数据库的版本变更

你可能感兴趣的:(Spring,Boot,Flyway)