Java使用flyway實(shí)現(xiàn)腳本自動(dòng)化的方法詳解
如何使用
使用Flyway
,僅需將編寫的好SQL語(yǔ)句寫成sql腳本文件,根據(jù)版本規(guī)定填寫正確的文件名,存放到指定的目錄底下,在項(xiàng)目進(jìn)行啟動(dòng)時(shí)即可自動(dòng)掃描指定目錄底下的腳本,根據(jù)數(shù)據(jù)庫(kù)Flyway
配置表進(jìn)行對(duì)比,將未執(zhí)行的腳本按順序自動(dòng)執(zhí)行。
Flyway
腳本遷移文件命名需要遵循以下規(guī)則:
如上圖,文件命名規(guī)范主要分為以下幾個(gè)部分:
- 前綴:
V
表示版本化遷移,U
表示撤銷遷移,R
表示可重復(fù)遷移。 - 下劃線:在版本號(hào)中下劃線會(huì)被
.
替換。 - 分隔符:兩個(gè)下劃線,用來(lái)分隔版本號(hào)與文件描述詞
- 描述:腳本文件內(nèi)容的簡(jiǎn)短描述,執(zhí)行后內(nèi)容中的下劃線則會(huì)被替換為空格。
文件名版本號(hào)與文件描述內(nèi)容以兩個(gè)下劃線分隔開(kāi),命名示例:
- V1_20231026154401__create_student_table.sql
- V1_20231026162233__insert_student_data.sql
通常情況下我們都是直接以V
前綴進(jìn)行命名,在需要進(jìn)行回退操作時(shí),直接在腳本中寫好回退的腳本即可。
更多內(nèi)容可以參考官方文檔說(shuō)明:https://documentation.red-gate.com/fd/migrations-184127470.html#versioned-migrations
案例分析
首先需要引入flyway依賴包:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.4.1</version> </dependency>
在application.yml
文件中添加flyway
相關(guān)配置信息,開(kāi)啟flyway
腳本遷移功能:
spring: flyway: # flyway 開(kāi)啟/關(guān)閉 enabled: true # 當(dāng)遷移時(shí)發(fā)現(xiàn)目標(biāo)schema非空,而且?guī)в袥](méi)有元數(shù)據(jù)的表時(shí),是否自動(dòng)執(zhí)行基準(zhǔn)遷移,默認(rèn)false. baseline-on-migrate: true # 是否允許無(wú)序的遷移,默認(rèn)false. out-of-order: true # 遷移時(shí)是否校驗(yàn),默認(rèn)為true validate-on-migrate: false # 遷移腳本的位置,默認(rèn)db/migration. locations: classpath:db # flyway 基線版本號(hào) baseline-version: 0 # flyway 執(zhí)行記錄表 table: demo_flyway_schema_history
在上面的配置中也描述了每個(gè)屬性參數(shù)的作用,上面的腳本位置配置的是locations: classpath:db
,在這里我們就可以將需要進(jìn)行遷移執(zhí)行的腳本文件,按上面的命名規(guī)范配置好之后存放到此目錄下:
確認(rèn)好文件存放位置無(wú)誤之后,我們就可以直接啟動(dòng)服務(wù):
如圖服務(wù)啟動(dòng)成功后,我們就可以看到相關(guān)flyway
執(zhí)行的日志信息,如果是首次使用flyway
遷移腳本的話,那么就會(huì)自動(dòng)幫我們創(chuàng)建一個(gè)flyway執(zhí)行記錄表,表結(jié)構(gòu)如下:
- installed_rank:主鍵
- version:版本號(hào)
- description:文件描述
- type:腳本類型
- script:完整文件名
- checksum:flyway通過(guò)特定的算法根據(jù)文件內(nèi)容計(jì)算出來(lái)的一個(gè)整數(shù),可以簡(jiǎn)單理解為文件內(nèi)容的標(biāo)識(shí)符,如果我們?cè)谂渲弥虚_(kāi)啟校驗(yàn)時(shí)(
validate-on-migrate=true
),如果我們文件內(nèi)容有修改將計(jì)算出新的checksum
與執(zhí)行過(guò)的的checksum
不一致時(shí)即會(huì)報(bào)mismatch
的錯(cuò)誤,以此來(lái)告知開(kāi)發(fā)者腳本有變動(dòng)。 - installed_by:執(zhí)行腳本的數(shù)據(jù)庫(kù)用戶
- execution_time:執(zhí)行時(shí)間
- success:執(zhí)行結(jié)果,0:失敗,1:成功
總結(jié)
有了這么一個(gè)腳本遷移的工具,對(duì)于開(kāi)發(fā)人員也好,對(duì)運(yùn)維人員也罷,都能夠減輕雙方的負(fù)擔(dān),并且減少在部署時(shí)手動(dòng)去執(zhí)行腳本出錯(cuò)的風(fēng)險(xiǎn),好的工具一直在為我們節(jié)約更多的時(shí)間,用上之后真的停不下來(lái)。
以上就是Java使用flyway實(shí)現(xiàn)腳本自動(dòng)化的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Java flyway實(shí)現(xiàn)腳本自動(dòng)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解
這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Spark Streaming編程初級(jí)實(shí)踐詳解
這篇文章主要為大家介紹了Spark Streaming編程初級(jí)實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Java數(shù)據(jù)結(jié)構(gòu)之LinkedList從鏈表到實(shí)現(xiàn)
LinkedList是Java中常用的數(shù)據(jù)結(jié)構(gòu)之一,實(shí)現(xiàn)了鏈表的特性,支持快速添加、刪除元素,可以用于實(shí)現(xiàn)隊(duì)列、棧、雙向隊(duì)列等數(shù)據(jù)結(jié)構(gòu)。LinkedList的內(nèi)部實(shí)現(xiàn)采用了雙向鏈表,其中每個(gè)節(jié)點(diǎn)都包含前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)的引用,可以直接訪問(wèn)鏈表的頭尾元素2023-04-04創(chuàng)建SpringBoot工程并集成Mybatis的方法
這篇文章主要介紹了創(chuàng)建SpringBoot工程并集成Mybatis,需要的朋友可以參考下2018-06-06解決BeanUtils.copyProperties無(wú)法成功封裝的問(wèn)題
這篇文章主要介紹了解決BeanUtils.copyProperties無(wú)法成功封裝的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java 實(shí)戰(zhàn)項(xiàng)目錘煉之在線美食網(wǎng)站系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)在線美食網(wǎng)站系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11JavaEE賬號(hào)注冊(cè)模擬網(wǎng)站郵箱激活
這篇文章主要為大家詳細(xì)介紹了JavaEE賬號(hào)注冊(cè)模擬網(wǎng)站郵箱激活,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09如何實(shí)現(xiàn)java執(zhí)行kettle并傳參數(shù)
文章主要介紹了在審批成功后如何使用Kettle傳遞批次號(hào)參數(shù)并執(zhí)行KTR文件,同時(shí),提到了所需的主要POM依賴,并強(qiáng)調(diào)了個(gè)人經(jīng)驗(yàn)的價(jià)值,鼓勵(lì)大家參考和使用2025-01-01使用JMX連接JVM實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了使用JMX連接JVM實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04