轉(zhuǎn)載知乎帖子https://zhuanlan.zhihu.com/p/304110137著隆,帖子寫的很好,淺顯易懂
Flyway簡介
Flyway 是一款開源的數(shù)據(jù)庫版本管理工具呀癣。它可以很方便的在命令行中使用美浦,或者在Java應(yīng)用程序中引入,用于管理我們的數(shù)據(jù)庫版本项栏。
在項目或產(chǎn)品中浦辨,很難一開始就把業(yè)務(wù)理清楚,把數(shù)據(jù)庫表設(shè)計好沼沈,因此數(shù)據(jù)表也會在迭代周期不斷迭代荤牍。在Java應(yīng)用程序中使用Flyway案腺,能快速有效地用于迭代數(shù)據(jù)庫表結(jié)構(gòu),并保證部署到測試環(huán)境或生產(chǎn)環(huán)境時康吵,數(shù)據(jù)表都是保持一致的劈榨。
Flyway支持的數(shù)據(jù)庫很多,從官網(wǎng)摘抄如下:
Supported databases are Oracle, SQL Server (including Amazon RDS and Azure SQL Database), Azure Synapse (Formerly Data Warehouse), DB2, MySQL (including Amazon RDS, Azure Database & Google Cloud SQL), Aurora MySQL, MariaDB, Percona XtraDB Cluster, TestContainers, PostgreSQL (including Amazon RDS, Azure Database, Google Cloud SQL & Heroku), Aurora PostgreSQL, Redshift, CockroachDB, SAP HANA, Sybase ASE, Informix, H2, HSQLDB, Derby, Snowflake, SQLite and Firebird.
更多的特性晦嵌,可直接在官網(wǎng)上查詢同辣,這里不再一一羅列。
Flyway是如何工作的
Flyway工作流程如下:
1惭载、項目啟動旱函,應(yīng)用程序完成數(shù)據(jù)庫連接池的建立后,F(xiàn)lyway自動運行描滔。
2棒妨、初次使用時,F(xiàn)lyway會創(chuàng)建一個flyway_schema_history
表含长,用于記錄sql執(zhí)行記錄券腔。
3、Flyway會掃描項目指定路徑下(默認(rèn)是classpath:db/migration
)的所有sql腳本拘泞,與flyway_schema_history
表腳本記錄進行比對纷纫。如果數(shù)據(jù)庫記錄執(zhí)行過的腳本記錄,與項目中的sql腳本不一致陪腌,F(xiàn)lyway會報錯并停止項目執(zhí)行辱魁。
4、如果校驗通過诗鸭,則根據(jù)表中的sql記錄最大版本號染簇,忽略所有版本號不大于該版本的腳本。再按照版本號從小到大强岸,逐個執(zhí)行其余腳本剖笙。
在SpringBoot項目使用Flyway
以下演示如何在SpringBoot項目中使用Flyway,代碼保存我的Github倉庫请唱。
1、初始化一個SpringBoot項目过蹂,引入MySQL數(shù)據(jù)庫驅(qū)動依賴等十绑,并且需要引入Flyway依賴:
<!--引入flyway-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.0</version>
</dependency>
2、添加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個下劃線__
sql-migration-separator: __
# 遷移sql腳本文件名稱的后綴
sql-migration-suffixes: .sql
# 遷移時是否進行校驗甚亭,默認(rèn)true
validate-on-migrate: true
# 當(dāng)遷移發(fā)現(xiàn)數(shù)據(jù)庫非空且存在沒有元數(shù)據(jù)的表時贷币,自動執(zhí)行基準(zhǔn)遷移,新建schema_version表
baseline-on-migrate: true
3亏狰、根據(jù)在配置文件的腳本存放路徑的配置役纹,在resource目錄下建立文件夾db/migration
。
4暇唾、添加需要運行的sql腳本促脉。sql腳本的命名規(guī)范為:V+版本號(版本號的數(shù)字間以”.“或”_“分隔開)+雙下劃線(用來分隔版本號和描述)+文件描述+后綴名,例如:V20201100__create_user.sql策州。如圖所示:
[圖片上傳失敗...(image-a09551-1628589723263)]
5瘸味、啟動項目。啟動成功后够挂,在數(shù)據(jù)庫中可以看到已按照定義好的腳本旁仿,完成數(shù)據(jù)庫變更,并在flyway_schema_history
表插入了sql執(zhí)行記錄:
創(chuàng)建成功的表
sql執(zhí)行記錄