溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Flyway怎么部署

發(fā)布時(shí)間:2021-12-07 14:32:50 來源:億速云 閱讀:206 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Flyway怎么部署”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Flyway怎么部署”吧!

1.什么是 Flyway

我們在公司做開發(fā)時(shí),由于項(xiàng)目需求的變化,或者前期設(shè)計(jì)缺陷,導(dǎo)致在后期需要修改數(shù)據(jù)庫,這應(yīng)該是一個(gè)比較常見的事情,如果項(xiàng)目還沒上線,你可能把表刪除了重新創(chuàng)建,但是如果項(xiàng)目已經(jīng)上線了,就不能這樣簡單粗暴了,我們需要通過 SQL 腳本在已有數(shù)據(jù)表的基礎(chǔ)上進(jìn)行升級。

目前 Java 這塊,想要對數(shù)據(jù)庫的版本進(jìn)行管理主要有兩個(gè)工具:

  • Flyway
  • Liquibase

兩個(gè)工具各有千秋,但是核心功能都是數(shù)據(jù)庫的版本管理,這里主要來看 Flyway。就像我們使用 Git 來管理代碼版本一樣,F(xiàn)lyway 可以用來管理數(shù)據(jù)庫版本。

好了,接下來我們就來看看用 Flyway 如何簡化微人事部署,然后再來說說 Flyway 的一個(gè)大致原理。

 

2.嵌入到微人事

如果是在一個(gè)全新的項(xiàng)目中使用 Flyway,那么在新建一個(gè) Spring Boot 項(xiàng)目時(shí),就有 Flyway 的選項(xiàng),如下圖:

Flyway怎么部署  

項(xiàng)目創(chuàng)建成功后,resources 目錄下也會多出來一個(gè) db/migration 目錄,這個(gè)目錄用來存放數(shù)據(jù)庫腳本,如下:

Flyway怎么部署  

「注意」

這個(gè)如果創(chuàng)建項(xiàng)目時(shí)就選擇了 Flyway 依賴,就會有這個(gè)目錄?,F(xiàn)在我要在已經(jīng)做好的微人事中加入 Flyway,這個(gè)目錄就需要我手動(dòng)創(chuàng)建了。

首先在微人事中添加 flyway 依賴:

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

然后在 vhr-web 模塊下的 resources 目錄下,手動(dòng)創(chuàng)建 db/migration 目錄,然后在該目錄下創(chuàng)建數(shù)據(jù)庫腳本,數(shù)據(jù)庫腳本的命名方式如下:

  • V<VERSION>__<NAME>.sql

首先是大寫字母 V,然后是版本號,要是有小版本可以用下劃線隔開,例如 2_1,版本號后面是兩個(gè)下劃線,然后是腳本名稱,文件后綴是 .sql。

例如我這里創(chuàng)建我的第一個(gè)數(shù)據(jù)庫腳本,取名為 V1__vhr.sql,腳本內(nèi)容就是微人事的數(shù)據(jù)庫腳本,大家可以在 https://github.com/lenve/vhr 這里獲取到。

完了之后,可以不用添加額外配置,大家只需要在本地 MySQL 中創(chuàng)建一個(gè)空的 vhr 數(shù)據(jù)庫即可,然后直接啟動(dòng)微人事項(xiàng)目,項(xiàng)目啟動(dòng)成功后,我們查看啟動(dòng)日志:

Flyway怎么部署  

從這段啟動(dòng)日志中,我們可以看到 Flyway 的執(zhí)行信息,數(shù)據(jù)庫腳本的執(zhí)行執(zhí)行,同時(shí)這里還說了,F(xiàn)lyway 還給創(chuàng)建了一個(gè) flyway_schema_history 表,這個(gè)表用來記錄數(shù)據(jù)庫的更新歷史。

這個(gè)時(shí)候,打開本地?cái)?shù)據(jù)庫,我們發(fā)現(xiàn) vhr 庫中該有的表都有了。同時(shí)還發(fā)現(xiàn)了 flyway_schema_history 表,如下:

Flyway怎么部署  

有了這條記錄,下次再啟動(dòng) vhr 項(xiàng)目,V1__vhr.sql 這個(gè)腳本文件就不會執(zhí)行了,因?yàn)橄到y(tǒng)知道這個(gè)腳本已經(jīng)執(zhí)行過了,如果你還想讓 V1__vhr.sql 腳本再執(zhí)行一遍,需要手動(dòng)刪除 flyway_schema_history 表中的對應(yīng)記錄,那么項(xiàng)目啟動(dòng)時(shí),這個(gè)腳本就會被執(zhí)行了。

 

3.執(zhí)行細(xì)節(jié)

  • 我們在定義腳本的時(shí)候,除了 V 字開頭的腳本之外,還有一種 R 字開頭的腳本,V 字開頭的腳本只會執(zhí)行一次,而 R 字開頭的腳本,只要腳本內(nèi)容發(fā)生了變化,啟動(dòng)時(shí)候就會執(zhí)行。
  • 使用了 Flyway 之后,如果再想進(jìn)行數(shù)據(jù)庫版本升級,就不用該以前的數(shù)據(jù)庫腳本了,直接創(chuàng)建新的數(shù)據(jù)庫腳本,項(xiàng)目在啟動(dòng)時(shí)檢測了有新的更高版本的腳本,就會自動(dòng)執(zhí)行,這樣,在和其他同事配合工作時(shí),也會方便很多。因?yàn)檎N覀兌际菑?Git 上拉代碼下來,不拉數(shù)據(jù)庫腳本,這樣要是有人更新了數(shù)據(jù)庫,其他同事不一定能夠收到最新的通知,使用了 Flyway 就可以有效避免這個(gè)問題了。
  • 所有的腳本,一旦執(zhí)行了,就會在 flyway_schema_history 表中有記錄,如果你不小心搞錯(cuò)了,可以手動(dòng)從 flyway_schema_history 表中刪除記錄,然后修改 SQL 腳本后再重新啟動(dòng)(生產(chǎn)環(huán)境不建議)。
 

4.其他配置

在 Spring Boot 中,關(guān)于 Flyway 也有不少配置,這些配置都在 application.properties 中進(jìn)行配置,常用的幾個(gè)來和大家說下:

  • spring.flyway.enabled:是否開啟 flyway,默認(rèn)就是開啟的
  • spring.flyway.encoding:flyway 字符編碼
  • spring.flyway.locations:sql 腳本的目錄,默認(rèn)是 classpath:db/migration,如果有多個(gè),用 , 隔開
  • spring.flyway.clean-disabled:這個(gè)屬性非常關(guān)鍵,它表示是否要清除已有庫下的表,如果執(zhí)行的腳本是 V1__xxx.sql,那么會先清除已有庫下的表,然后再執(zhí)行腳本,這在開發(fā)環(huán)境下還挺方便,但是在生產(chǎn)環(huán)境下就要命了,而且它默認(rèn)就是要清除,生產(chǎn)環(huán)境一定要自己配置設(shè)置為 true。
  • spring.flyway.table:配置數(shù)據(jù)庫信息表的名稱,默認(rèn)是 flyway_schema_history。

感謝各位的閱讀,以上就是“Flyway怎么部署”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Flyway怎么部署這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI