Flyway詳解及Springboot集成Flyway的詳細教程
Flayway是一款數據庫版本控制管理工具,,支持數據庫版本自動升級,Migrations可以寫成sql腳本,也可以寫在java代碼里;不僅支持Command Line和java api ,也支持Build構建工具和Spring boot,也可以在分布式環(huán)境下能夠安全可靠安全地升級數據庫,同時也支持失敗恢復。
Flyway最核心的就是用于記錄所有版本演化和狀態(tài)的MetaData表,Flyway首次啟動會創(chuàng)建默認名為SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要執(zhí)行的sql腳本等;
sql腳本的格式:V+版本號 +雙下劃線+秒速+結束符
例如:V1__INIT_DATABASE.sql
上面的V 是默認值, 可以通過
flyway.sql-migration-prefix來指定前綴
Migrate:
Migrate是指把數據Schema遷移到最新版本,在Migrate時會檢查MetaData元數據表,如果不存在就創(chuàng)建MetaData表,MetaData用于記錄數據庫歷史變更等信息;
Migrate會掃描指定文件系統或者classpath下的Migrations。會與MetaData中的記錄進行對比,進行版本升級;
Clean:清除掉對應數據庫Schema中所有的對象,包括表結構,視圖,存儲過程等,clean操作在dev 和 test階段很好用;
Info:用于打印所有的Migrations的詳細和狀態(tài)信息,也是通過MetaData和Migrations完成的,可以快速定位當前的數據庫版本;
validate:驗證以及apply的Migrations是否有變更,默認開啟的;原理是對比MetaData表與本地Migrations的checkNum值,如果值相同則驗證通過,否則失敗。
BaseLine:對已經存在數據庫Schema結構的數據庫一種解決方案。實現在非空數據庫新建MetaData表,并把Migrations應用到該數據庫;也可以應用到已有表結構的數據庫中也可以實現添加Metadata表。
repair:repair操作能夠修復metaData表,該操作在metadata出現錯誤時很有用
用途:
1):移除失敗的Migration記錄,只針對不支持DDL事務的數據庫
使用Flayway:
1、引入flyway的依賴:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.0.3</version> </dependency>
<plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>5.0.3</version> </plugin>
2、新建一個maven的Springboot項目,在配置文件中配置數據源信息:
server.port=8088 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3、在classpath下新建/db/migration文件夾,并創(chuàng)建sql腳本文件:
use testdb; CREATE TABLE person ( id int(11) NOT NULL AUTO_INCREMENT, first varchar(100) NOT NULL, last varchar(100) NOT NULL, dateofbirth DATE DEFAULT null, placeofbirth varchar(100) not null, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into person (first,last,dateofbirth,placeofbirth) values('Dursun','KOC', STR_TO_DATE('02/10/1982', '%m/%d/%Y'),'Erzincan'); insert into person (first,last,dateofbirth,placeofbirth) values('Durseeun','KeeOC', STR_TO_DATE('05/10/1982', '%m/%d/%Y'),'Erzeeincan');
4、啟動springboot項目:
加載了sql腳本 。
5、查看數據庫:
生成了flyway-schema-history表,這個版本默認是這個表,如果想自己指定schema表的命,可以設置:
flyway.tableflyway
6:flyway的一些其他配置:
flyway.baseline-description對執(zhí)行遷移時基準版本的描述. flyway.baseline-on-migrate當遷移時發(fā)現目標schema非空,而且?guī)в袥]有元數據的表時,是否自動執(zhí)行基準遷移,默認false. flyway.baseline-version開始執(zhí)行基準遷移時對現有的schema的版本打標簽,默認值為1. flyway.check-location檢查遷移腳本的位置是否存在,默認false. flyway.clean-on-validation-error當發(fā)現校驗錯誤時是否自動調用clean,默認false. flyway.enabled是否開啟flywary,默認true. flyway.encoding設置遷移時的編碼,默認UTF-8. flyway.ignore-failed-future-migration當讀取元數據表時是否忽略錯誤的遷移,默認false. flyway.init-sqls當初始化好連接時要執(zhí)行的SQL. flyway.locations遷移腳本的位置,默認db/migration. flyway.out-of-order是否允許無序的遷移,默認false. flyway.password目標數據庫的密碼. flyway.placeholder-prefix設置每個placeholder的前綴,默認${. flyway.placeholder-replacementplaceholders是否要被替換,默認true. flyway.placeholder-suffix設置每個placeholder的后綴,默認}. flyway.placeholders.[placeholder name]設置placeholder的value flyway.schemas設定需要flywary遷移的schema,大小寫敏感,默認為連接默認的schema. flyway.sql-migration-prefix遷移文件的前綴,默認為V. flyway.sql-migration-separator遷移腳本的文件名分隔符,默認__ flyway.sql-migration-suffix遷移腳本的后綴,默認為.sql flyway.tableflyway使用的元數據表名,默認為schema_version flyway.target遷移時使用的目標版本,默認為latest version flyway.url遷移時使用的JDBC URL,如果沒有指定的話,將使用配置的主數據源 flyway.user遷移數據庫的用戶名 flyway.validate-on-migrate遷移時是否校驗,默認為true.
flyway的入門就到這里,其他內容后面再補上。
到此這篇關于Flyway詳解及Springboot集成Flyway的詳細教程的文章就介紹到這了,更多相關Flyway介紹 Springboot集成Flyway內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解SpringBoot+Mybatis實現動態(tài)數據源切換
這篇文章主要介紹了詳解SpringBoot+Mybatis實現動態(tài)數據源切換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05java?MultipartFile文件上傳重命名詳細代碼示例
在文件上傳功能開發(fā)中,為防止文件重名導致數據覆蓋,常見的做法是在文件名前加上UUID或時間戳來區(qū)分,這篇文章主要介紹了java?MultipartFile?multipartFile文件上傳重命名的相關資料,需要的朋友可以參考下2024-09-09java如何實現postman中用x-www-form-urlencoded參數的請求
在Java開發(fā)中,模擬Postman發(fā)送x-www-form-urlencoded類型的請求是一個常見需求,本文主要介紹了如何在Java中實現這一功能,首先,需要通過導入http-client包來創(chuàng)建HTTP客戶端,接著,利用該客戶端發(fā)送Post請求2024-09-09