#IT明星不是夢#【從0開始Web開發實戰】SpringBoot集成Flyway,版本化管理數據庫

目錄:

1. SpringBoot集成Flyway

2. 添加SQL腳本

3. 數據庫版本信息

4. 常見錯誤和解決方法


SpringBoot是使用最多的Java開發框架,特點是自動化配置依賴模塊,提供的一系列starter腳手架便於使用,充分體現了“開箱即用”和“約定優於配置”原則。


Flyway是一個數據庫版本化管理工具,通過SQL腳本實現DB Migration自動化升級,支持獨立運行,也可以和構建工具或者Spring開發環境集成。本文分享SpringBoot集成Flyway的配置方法,以及項目中的使用示例。


代碼下載:https://github.com/jextop/StarterApi/

項目和SQL文件:

├── pom.sh

├── src/main/resources

│   ├── application.yml

│   └── db/migration

│       ├── V1.0.0_init.sql

│       └── V1.0.1_user.sql



代碼文件

功能要點

SpringBoot集成Flyway

pom.xml

引入Flyway依賴flyway-core

application.yml

配置數據源,也可以指定獨立的Flyway配置。

resources\db\migration\

SQL腳本,比如V1.0.0__init.sql,名稱規則可配置。

數據庫版本信息

數據表:flyway_schema_history

Flyway記錄Migration信息和狀態,數據表名稱可配置。

一,SpringBoot集成Flyway

1. 新建SpringBoot項目時,選中Flyway,將自動添加Flyway依賴。

 image.png

2. 已有SpringBoot項目,可以在pom.xml中直接引用Flyway:

<dependency>
   <groupId>org.flywaydb</groupId>
   <artifactId>flyway-core</artifactId>
</dependency>

3. application.yml中配置數據源以及Flyway:

spring:
  flyway:
    locations: ["classpath:db/migration"]
    table: flyway_schema_history

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/starter?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
    username: root
    password: root

二,添加SQL腳本:resources\db\migration\

腳本文件路徑和命名規則都可以配置,注意版本號遞增,默認爲:V+版本號+雙下劃線+描述

 image.png

三,數據庫版本信息

啓動程序時,Flyway自動檢查並運行SQL腳本

 image.png

Flyway將版本信息和狀態保存到數據表flyway_schema_history

image.png


四,實際開發過程中常見錯誤,分享解決方法和建議:

migrate運行失敗,提示sql腳本錯誤

解決:獨立運行flyway命令repair修復數據庫中的升級信息,糾正SQL錯誤後再次migrate

建議:運行migrate之前,首先確保SQL正確。


migrate沒有運行增加的SQL腳本

解決:SQL腳本命名遵守規則,比如V1.0.0__init.sql


migrate運行失敗,提示權限不夠“xxx command denied to user ‘xxx’”

解決:賬號需要擁有對應sql腳本需要的權限,比如create table


migrate運行失敗,提示數據庫不空“Found non-empty schema(s)”

解決:按照提示獨立運行flyway命令baseline初始化。

建議:清空數據庫,初始化從空數據庫開始。


提示找不到數據庫“unkown database ‘xxx’”

解決:需要先創建出來一個空數據庫。


Spring集成Flyway後,清空數據,啓動失敗

解決:確認validationQuery,是否select 1 from dual還是某個指定的數據表。空數據庫時需使用dual


Spring集成Flyway後,啓動運行出錯

解決:某些依賴數據庫的bean,需要指定在Flyway完成migrate之後運行


SQL腳本V1.0__xxx.sql沒有被運行

解決:Flyway通過版本號碼唯一區分腳本,如果最開始運行baseline,Flyway將自動創建版本1.0

建議:1,從空數據庫開始初始化,不要運行baseline

建議:2,初始化SQL腳本版本號從V1.0.1開始,使用三位數字。


--------------------------------

如果您覺得這篇文章對您有幫助,請點個“贊”,博主感激不盡!

Jext技術社區專注領域:軟件工程實踐,JIRA研發管理分佈式系統架構,軟件質量保障

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章