Homepage
https://flywaydb.org/documentation/
Flyway 簡(jiǎn)介
Flyway 是一款開源的數(shù)據(jù)庫版本管理工具。它可以很方便的在命令行中使用,或者在 Java 應(yīng)用程序中引入名秀,用于管理我們的數(shù)據(jù)庫版本泣矛。
在項(xiàng)目或產(chǎn)品中晓锻,很難一開始就把業(yè)務(wù)理清楚递惋,把數(shù)據(jù)庫表設(shè)計(jì)好,因此數(shù)據(jù)表也會(huì)在迭代周期不斷迭代共螺。在 Java 應(yīng)用程序中使用 Flyway,能快速有效地用于迭代數(shù)據(jù)庫表結(jié)構(gòu)葛假,并保證部署到測(cè)試環(huán)境或生產(chǎn)環(huán)境時(shí)障陶,數(shù)據(jù)表都是保持一致的。
Flyway 是如何工作的
Flyway 工作流程如下:
- 項(xiàng)目啟動(dòng)聊训,應(yīng)用程序完成數(shù)據(jù)庫連接池的建立后抱究,F(xiàn)lyway 自動(dòng)運(yùn)行。
- 初次使用時(shí)带斑,F(xiàn)lyway 會(huì)創(chuàng)建一個(gè) flyway_schema_history 表鼓寺,用于記錄 sql 執(zhí)行記錄。
- Flyway 會(huì)掃描項(xiàng)目指定路徑下(默認(rèn)是 classpath:db/migration )的所有 sql 腳本勋磕,與 flyway_schema_history 表腳本記錄進(jìn)行比對(duì)妈候。如果數(shù)據(jù)庫記錄執(zhí)行過的腳本記錄,與項(xiàng)目中的 sql 腳本不一致朋凉,F(xiàn)lyway 會(huì)報(bào)錯(cuò)并停止項(xiàng)目執(zhí)行州丹。
- 如果校驗(yàn)通過醋安,則根據(jù)表中的sql記錄最大版本號(hào)杂彭,忽略所有版本號(hào)不大于該版本的腳本。再按照版本號(hào)從小到大吓揪,逐個(gè)執(zhí)行其余腳本亲怠。
在 SpringBoot 項(xiàng)目使用 Flyway
以下演示如何在 SpringBoot 項(xiàng)目中使用 Flyway。
- 初始化一個(gè) SpringBoot 項(xiàng)目柠辞,引入 MySQL 數(shù)據(jù)庫驅(qū)動(dòng)依賴等团秽,并且需要引入 Flyway 依賴:
<!--引入flyway-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.0</version>
</dependency>
- 添加 Flyway 配置:
spring:
# 數(shù)據(jù)庫連接配置
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
# 編碼格式,默認(rèn)UTF-8
encoding: UTF-8
# 遷移sql腳本文件存放路徑叭首,默認(rèn)db/migration
locations: classpath:db/migration
# 遷移sql腳本文件名稱的前綴习勤,默認(rèn)V
sql-migration-prefix: V
# 遷移sql腳本文件名稱的分隔符,默認(rèn)2個(gè)下劃線__
sql-migration-separator: __
# 遷移sql腳本文件名稱的后綴
sql-migration-suffixes: .sql
# 遷移時(shí)是否進(jìn)行校驗(yàn)焙格,默認(rèn)true
validate-on-migrate: true
# 當(dāng)遷移發(fā)現(xiàn)數(shù)據(jù)庫非空且存在沒有元數(shù)據(jù)的表時(shí)图毕,自動(dòng)執(zhí)行基準(zhǔn)遷移,新建schema_version表
baseline-on-migrate: true
- 根據(jù)在配置文件的腳本存放路徑的配置眷唉,在resource目錄下建立文件夾db/migration
- 添加需要運(yùn)行的sql腳本予颤。sql腳本的命名規(guī)范為:V+版本號(hào)(版本號(hào)的數(shù)字間以”.“或”_“分隔開)+雙下劃線(用來分隔版本號(hào)和描述)+文件描述+后綴名,例如:V0.7.5__init.sql冬阳。如圖所示:
- 啟動(dòng)項(xiàng)目蛤虐。啟動(dòng)成功后,在數(shù)據(jù)庫中可以看到已按照定義好的腳本肝陪,完成數(shù)據(jù)庫變更驳庭,并在
flyway_schema_history
表插入了sql執(zhí)行記錄: