Flyway快速上手教程


簡介

  Flyway 是一款開源的數據庫版本管理工具。它可以很方便的在命令行中使用,或者在Java應用程序中引入,用於管理我們的數據庫版本。

  在項目或產品中,很難一開始就把業務理清楚,把數據庫表設計好,因此數據表也會在迭代周期不斷迭代。在Java應用程序中使用Flyway,能快速有效地用於迭代數據庫表結構,並保證部署到測試環境或生產環境時,數據表都是保持一致的。

Flyway是如何工作的

Flyway工作流程如下:

  1. 項目啟動,應用程序完成數據庫連接池的建立后,Flyway自動運行。
  2. 初次使用時,Flyway會創建一個 flyway_schema_history 表,用於記錄sql執行記錄。
  3. Flyway會掃描項目指定路徑下(默認是 classpath:db/migration )的所有sql腳本,與 flyway_schema_history 表腳本記錄進行比對。如果數據庫記錄執行過的腳本記錄,與項目中的sql腳本不一致,Flyway會報錯並停止項目執行。
  4. 如果校驗通過,則根據表中的sql記錄最大版本號,忽略所有版本號不大於該版本的腳本。再按照版本號從小到大,逐個執行其余腳本。

在SpringBoot項目使用Flyway

以下演示如何在SpringBoot項目中使用Flyway,代碼保存我的Github倉庫。

1、初始化一個SpringBoot項目,引入MySQL數據庫驅動依賴等,並且需要引入Flyway依賴:

<!--引入flyway-->
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>6.1.0</version>
</dependency>

2、添加Flyway配置:

spring:
  # 數據庫連接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm-demo?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    username: xxx
    password: xxx
  flyway:
    # 是否啟用flyway
    enabled: true
    # 編碼格式,默認UTF-8
    encoding: UTF-8
    # 遷移sql腳本文件存放路徑,默認db/migration
    locations: classpath:db/migration
    # 遷移sql腳本文件名稱的前綴,默認V
    sql-migration-prefix: V
    # 遷移sql腳本文件名稱的分隔符,默認2個下划線__
    sql-migration-separator: __
    # 遷移sql腳本文件名稱的后綴
    sql-migration-suffixes: .sql
    # 遷移時是否進行校驗,默認true
    validate-on-migrate: true
    # 當遷移發現數據庫非空且存在沒有元數據的表時,自動執行基准遷移,新建schema_version表
    baseline-on-migrate: true

3、根據在配置文件的腳本存放路徑的配置,在resource目錄下建立文件夾 db/migration 。

4、添加需要運行的sql腳本。sql腳本的命名一定要規范,否則運行flyway會報錯。命名規則主要有兩種:

  1. 僅需要被執行一次的SQL命名以大寫的"V"開頭,V+版本號(版本號的數字間以”.“或”_“分隔開)+雙下划線(用來分隔版本號和描述)+文件描述+后綴名。例如:  V20201100__create_user.sql、V2.1.5__create_user_ddl.sql、V4.1_2__add_user_dml.sql  。
  2. 可重復運行的SQL,則以大寫的“R”開頭,后面再以兩個下划線分割,其后跟文件名稱,最后以.sql結尾。(不推薦使用)比如: R__truncate_user_dml.sql 。

  其中,V開頭的SQL執行優先級要比R開頭的SQL優先級高。

  其中2.1.6、2.1.7和every的文件夾不會影響flyway對SQL的識別和運行,可以自行取名和分類。

5、啟動項目。啟動成功后,在數據庫中可以看到已按照定義好的腳本,完成數據庫變更,並在 flyway_schema_history 表插入了sql執行記錄:

  如果我們修改V2__add_user.sql中的內容,再次執行的話,就會報錯,提示信息如下:

   [ERROR] Migration checksum mismatch for migration version 2 

  如果我們修改了R__add_unknown_user.sql,再次執行的話,該腳本就會再次得到執行,並且flyway的歷史記錄表中也會增加本次執行的記錄。

maven插件的使用:Flyway快速上手教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM