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.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>6.1.0</version>
</dependency>

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

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
    <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 管理你數據庫的版本變更
發佈了85 篇原創文章 · 獲贊 335 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章