SpringBoot整合Flyway的方法(數(shù)據(jù)庫(kù)版本遷移工具)
Flyway是什么
Flyway是一款開(kāi)源的數(shù)據(jù)庫(kù)版本管理工具,F(xiàn)lyway可以獨(dú)立于應(yīng)用實(shí)現(xiàn)管理并跟蹤數(shù)據(jù)庫(kù)的變更,F(xiàn)lyway根據(jù)自己的約定,不需要復(fù)雜的配置就可以實(shí)現(xiàn)數(shù)據(jù)的Migrate。Migrations可以寫(xiě)成SQL腳本,也可以寫(xiě)在Java代碼中,F(xiàn)lyway還支持Spring Boot。
簡(jiǎn)介
在團(tuán)隊(duì)開(kāi)發(fā)當(dāng)中,有可能每個(gè)人都是使用自己本地的數(shù)據(jù)庫(kù)。當(dāng)數(shù)據(jù)庫(kù)的表或者字段更新時(shí),往往需要告知團(tuán)隊(duì)的其他同事進(jìn)行更新。
Flyway數(shù)據(jù)庫(kù)版本遷移工具,目的就是解決該問(wèn)題而誕生的(我自己想的)。每當(dāng)我們更新數(shù)據(jù)庫(kù)的時(shí)候,只需要添加SQL文件到指定目錄中。Flyway會(huì)在數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)表,專門記錄已更新的SQL文件。當(dāng)我們下次執(zhí)行時(shí)則不會(huì)執(zhí)行已記錄并且執(zhí)行成功的SQL文件。
整合
maven
現(xiàn)在的Flyway的最新版本已經(jīng)到了6.4.2
。我用的是6.3.3
。
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.3.3</version> </dependency>
application配置
搞定了Flyway的依賴后,修改一下SpringBoot的application.yml
或application.xml
配置。
spring: flyway: url: jdbc:mysql://192.168.138.132:3306/hotel-server?useUnicode=true&characterEncoding=UTF-8 user: johnson password: 123456 table: flyway_schema_history enabled: true locations: classpath:db/migration clean-disabled: false
flyway配置詳解
url:連接數(shù)據(jù)庫(kù)的Url 默認(rèn)為spring.datasource.url
user:連接數(shù)據(jù)庫(kù)的賬號(hào) 默認(rèn)為spring.datasource.username
password:連接數(shù)據(jù)庫(kù)的密碼 默認(rèn)為spring.datasource.password
table:自定義數(shù)據(jù)庫(kù)版本管理表 默認(rèn)為 flyway_schema_history
enabled:是否開(kāi)啟 默認(rèn)為開(kāi)啟
locations:SQL文件存放路徑 默認(rèn) classpath:db/migration
SQL文件
上面的locations
參數(shù)配置的SQL文件存放路徑為 classpath:db/migration
,classpath
對(duì)應(yīng)的目錄就是resources
目錄,創(chuàng)建后的目錄如下圖:
SQL文件如上圖,SQL文件名必須為V1.0.x__xxx.sql
(注意:這里的下劃線為兩個(gè)_
,我也是掉坑了才知道),這樣可以對(duì)應(yīng)SQL更新的版本號(hào)。啟動(dòng)了SpringBoot項(xiàng)目后,就會(huì)自動(dòng)幫你執(zhí)行SQL文件,可以看到數(shù)據(jù)庫(kù)版本控制表中生成的數(shù)據(jù):
clean操作
Flyway的clean
操作:徹底清除已配置的架構(gòu),它將有效地為您提供一個(gè)全新的起點(diǎn)。所有對(duì)象(表,視圖,過(guò)程等)都將被刪除。
spring: flyway: clean-on-validation-error: true clean-disabled: false
clean-on-validation-error
:發(fā)生驗(yàn)證的錯(cuò)誤時(shí)是否執(zhí)行clean操作(如SQL執(zhí)行失敗),默認(rèn)false,生產(chǎn)中必須使用false。
clean-disabled
:是否禁用clean操作,默認(rèn)false,生產(chǎn)中必須使用true
如果我們?cè)O(shè)置 clean-on-validation-error = true
,clean-disabled = false
。
當(dāng)我們的SQL文件執(zhí)行失敗,在數(shù)據(jù)庫(kù)版本控制表flyway_schema_history
會(huì)添加一條失敗的記錄,success字段為0,此時(shí)并不會(huì)執(zhí)行clean
操作。
當(dāng)把SQL文件修改正確并執(zhí)行完后,此時(shí)flyway_schema_history
會(huì)把失敗記錄的success字段由0改為1。并且會(huì)執(zhí)行clean
操作?。。。。≌麄€(gè)數(shù)據(jù)庫(kù)的表里面的數(shù)據(jù)都被清空了?。ǔ悄阍赟QL文件中添加了insert
操作)
其實(shí)在開(kāi)發(fā)環(huán)境我也是不建議使用clean
,畢竟填數(shù)據(jù)也是要時(shí)間的。。。
總結(jié)
團(tuán)隊(duì)開(kāi)發(fā)當(dāng)中的必備工具?。〔贿^(guò)生產(chǎn)環(huán)境當(dāng)中記得把clean-disabled
改為true
到此這篇關(guān)于SpringBoot整合Flyway的方法(數(shù)據(jù)庫(kù)版本遷移工具)的文章就介紹到這了,更多相關(guān)SpringBoot整合Flyway內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Flyway詳解及Springboot集成Flyway的詳細(xì)教程
- SpringBoot整合flyway實(shí)現(xiàn)步驟解析
- SpringBoot使用flyway初始化數(shù)據(jù)庫(kù)
- SpringBoot整合flyway實(shí)現(xiàn)自動(dòng)創(chuàng)建表的方法
- SpringBoot項(xiàng)目集成Flyway詳細(xì)過(guò)程
- SpringBoot使用Flyway進(jìn)行數(shù)據(jù)庫(kù)管理的操作方法
- SpringBoot使用Flyway進(jìn)行數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)示例
- springboot配置flyway(入門級(jí)別教程)
- spring boot整合flyway實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)維護(hù)的示例代碼
相關(guān)文章
Java實(shí)現(xiàn)判斷瀏覽器版本與類型簡(jiǎn)單代碼示例
這篇文章主要介紹了Java實(shí)現(xiàn)判斷瀏覽器版本與類型簡(jiǎn)單代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12springMVC使用ajaxFailUpload上傳圖片的方法
這篇文章主要介紹了springMVC使用ajaxFailUpload上傳圖片的相關(guān)知識(shí),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Java中文件寫(xiě)入內(nèi)容的幾種常見(jiàn)方法
本文主要介紹了Java中文件寫(xiě)入內(nèi)容的幾種常見(jiàn)方法,主要包括使用NIO的Files工具類、通過(guò)commons-io的FileUtils工具類、RandomAccessFile、PrintWriter和BufferedWriter這幾種,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán)
SpringSecurity是一個(gè)強(qiáng)大且靈活的身份驗(yàn)證和訪問(wèn)控制框架,本文主要介紹了SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07java中實(shí)體類和JSON對(duì)象之間相互轉(zhuǎn)化
Java中關(guān)于Json格式轉(zhuǎn)化Object,Map,Collection類型和String類型之間的轉(zhuǎn)化在我們實(shí)際項(xiàng)目中應(yīng)用的很是普遍和廣泛。最近工作的過(guò)程中也是經(jīng)常有,因此,自己封裝了一個(gè)類分享給大家。2015-05-05