1. 程式人生 > 程式設計 >Flyway詳解及Springboot整合Flyway的詳細教程

Flyway詳解及Springboot整合Flyway的詳細教程

Flayway是一款資料庫版本控制管理工具,,支援資料庫版本自動升級,Migrations可以寫成sql指令碼,也可以寫在java程式碼裡;不僅支援Command Line和java api ,也支援Build構建工具和Spring boot,也可以在分散式環境下能夠安全可靠安全地升級資料庫,同時也支援失敗恢復。

Flyway最核心的就是用於記錄所有版本演化和狀態的MetaData表,Flyway首次啟動會建立預設名為SCHEMA_VERSION的元素局表。 表中儲存了版本,描述,要執行的sql指令碼等;

sql指令碼的格式:V+版本號 +雙下劃線+秒速+結束符

例如:V1__INIT_DATABASE.sql

上面的V 是預設值, 可以通過

flyway.sql-migration-prefix來指定字首

Migrate:

Migrate是指把資料Schema遷移到最新版本,在Migrate時會檢查MetaData元資料表,如果不存在就建立MetaData表,MetaData用於記錄資料庫歷史變更等資訊;

Migrate會掃描指定檔案系統或者classpath下的Migrations。會與MetaData中的記錄進行對比,進行版本升級;

Clean:清除掉對應資料庫Schema中所有的物件,包括表結構,檢視,儲存過程等,clean操作在dev 和 test階段很好用;

Info:用於列印所有的Migrations的詳細和狀態資訊,也是通過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資料夾,並建立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,placeofbirth) values('Durseeun','KeeOC',STR_TO_DATE('05/10/1982','Erzeeincan');

4、啟動springboot專案:

Flyway詳解及Springboot整合Flyway的詳細教程

載入了sql指令碼 。

5、檢視資料庫:

生成了flyway-schema-history表,這個版本預設是這個表,如果想自己指定schema表的命,可以設定:

flyway.tableflyway

6:flyway的一些其他配置:

flyway.baseline-description對執行遷移時基準版本的描述.
flyway.baseline-on-migrate當遷移時發現目標schema非空,而且帶有沒有元資料的表時,是否自動執行基準遷移,預設false.
flyway.baseline-version開始執行基準遷移時對現有的schema的版本打標籤,預設值為1.
flyway.check-location檢查遷移指令碼的位置是否存在,預設false.
flyway.clean-on-validation-error當發現校驗錯誤時是否自動呼叫clean,預設false.
flyway.enabled是否開啟flywary,預設true.
flyway.encoding設定遷移時的編碼,預設UTF-8.
flyway.ignore-failed-future-migration當讀取元資料表時是否忽略錯誤的遷移,預設false.
flyway.init-sqls當初始化好連線時要執行的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內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!