資料庫版本管理工具Flyway使用介紹

2021-10-02 23:37:19 字數 2987 閱讀 1047

在日常開發中,我們可能經常遇到這樣的問題,由於專案需求的變化,或者前期需求設計不完善,導致在後期需要修改已經設計好的資料庫表結構。如果是乙個新開發的專案,還處於開發階段,新增字段還好,但是如果是調整某些字段,是不是有點奔潰呢?是不是會考慮過把需要調整的表刪除了重新建立呢?

目前對於資料庫版本進行管理的工具,主要有兩個:flyway、liquibase。對於liquibase本文不做過多介紹,了解就好。下面主要介紹一下flyway

1、新建專案新增flyway

對於在乙個全新的springboot專案中,如何使用flyway呢?這個很簡單,只需要在新建專案時,勾選一下flyway選項就可以使用,具體操作如下圖:

當專案建立成功後,可以看一下pom.xml檔案裡會自動加上flyway的依賴,並且會在resources目錄下自動建立乙個db/migration目錄,這個目錄用來存放資料庫指令碼的,具體如如下:

2、已有專案或模組新增 flyway

如果要在已有專案或者模組中使用flyway,步驟和上面的一樣。只不過手動操作上面兩步,第一步要在pom.xml中新增flyway的依賴,如下所示:

>

>

org.flywaydbgroupid

>

>

flyway-coreartifactid

>

dependency

>

第二步在對應的專案或者模組下的resources目錄下,手動建立db/migration目錄即可。

v__.sql
說明:首先是大寫字母 v,然後是版本號,要是有小版本可以用下劃線隔開,例如 3_1,版本號後面是兩個下劃線,然後是指令碼名稱,檔案字尾是 .sql。

舉個例子:現在需要建立test資料庫(第一次建立),資料庫中包含3個表,資料庫指令碼檔案的名稱如下。我們只需要把test資料庫中所有的建表語句以sql的形式匯出,拷貝到下面的檔案中就可以了。

v1__test.sql
完了之後,不用新增額外配置,只需要在mysql中建立乙個空的test資料庫即可,然後直接啟動專案,專案啟動成功後,就會自動幫我們把所有表都建立好。

當我們啟動專案時,可以發現資料庫指令碼會被執行,同時flyway還給建立了乙個flyway_schema_history表,這個表是flyway自己建立的,用來記錄資料庫的更新歷史。我們可以看一下這錶的具體結構:

有了這條記錄,下次再啟動專案,v1__test.sql 這個指令碼檔案就不會執行了,因為系統知道這個指令碼已經執行過了,如果你還想讓 v1__test.sql 指令碼再執行一遍,需要手動刪除 flyway_schema_history 表中的對應記錄,那麼專案啟動時,這個指令碼就會被執行了。

指令碼執行細節說明

我們在定義指令碼的時候,除了 v 字開頭的指令碼之外,還有一種 r 字開頭的指令碼,v 字開頭的指令碼只會執行一次,而 r 字開頭的指令碼,只要指令碼內容發生了變化,專案啟動時指令碼就會被重新執行。

使用了flyway之後,如果再想進行資料庫版本公升級,就不用修改以前的資料庫指令碼了,直接建立新的資料庫指令碼,專案在啟動時檢測了有新的更高版本的指令碼,就會自動執行。

所有的指令碼,一旦執行了,就會在flyway_schema_history表中有記錄,如果你不小心搞錯了,可以手動從flyway_schema_history表中刪除記錄,然後修改sql指令碼後再重新啟動。

1、spring.flyway.enabled

指定是否開啟 flyway,預設就是開啟的;

2、spring.flyway.encoding

指定 flyway 字元編碼;

3、spring.flyway.locations

sql 指令碼的目錄,預設是 classpath:db/migration,如果有多個,用逗號隔開;

4、spring.flyway.table

配置資料庫資訊表的名稱,預設是 flyway_schema_history;

5、spring.flyway.clean-disabled

這個屬性很重要,它表示是否要清除已有庫下的表,如果執行的指令碼是 v1__***.sql,那麼會先清除已有庫下的表,然後再執行指令碼,而且它預設就是要清除,生產環境一定要自己配置設定為 true。

配置例項:

指令碼命名方式補充

$prefix$version__$remark.$subfix
$preifx表示字首,可在配置中指定,預設為 v

$version 表示版本,中單可以使用 . 或 _分隔,在解析時會將_轉換為.儲存到fly_schema_history表的version欄位中;

$remark 表示備註,解析後會將這部分寫入到description欄位中;

$subfix 表示字尾,可在配置中指定,預設為.sql;

版本與描述之前使用__分隔(雙下劃線)

資料庫版本管理工具 flyway的使用

本文將介紹flyway在m en,springframework環境下的使用 pom.xml配置檔案配置 org.flywaydb flyway core 4.2.0 spring配置檔案配置 參考 在resource 的 db migration資料夾下建立sql檔案 在 db migration...

資料庫管理工具

資料庫管理員使用者sys與system sys擁有所有許可權,system次之。企業管理器 用web 形式登入 檢視使用者許可權 select from v pwfile users 將dba許可權授予普通使用者 grant sysdba to system grant sysdba to scot...

資料庫管理工具

1.解鎖普通使用者 在oracle10g或以上的版本中,出於安全考慮,所有oracle的預設使用者包括scott使用者都將被鎖住,此時,要先以system或sys使用者登入資料庫,之後使用如下命令 alter user scott identified by tiger account unlock...