flyway簡介
Flyway是一款數(shù)據(jù)庫遷移(migration)工具。簡單點說,就是在你部署應(yīng)用的時候,幫你執(zhí)行數(shù)據(jù)庫腳本的工具。Flyway支持SQL和Java兩種類型的腳本,你可以將腳本打包到應(yīng)用程序中,在應(yīng)用程序啟動時,由Flyway來管理這些腳本的執(zhí)行,這些腳本被Flyway稱之為migration。
嵌入微服務(wù)
創(chuàng)建微服務(wù)的時候,就有flyway選項

已有的微服務(wù)加入flyway
依賴
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
創(chuàng)建 db/migration 目錄
resources 目錄下,手動創(chuàng)建 db/migration 目錄

創(chuàng)建腳本
規(guī)范
V<VERSION>__<NAME>.sql
首先是大寫字母 V,然后是版本號,要是有小版本可以用下劃線隔開,例如 2_1,版本號后面是兩個下劃線,然后是腳本名稱,文件后綴是 .sql。
啟動
Flyway將在這個空數(shù)據(jù)中創(chuàng)建一張表,用于記錄migration的執(zhí)行情況,表名稱默認為:flyway_schema_history,老版本的表名稱:schema_version
執(zhí)行細節(jié)
- 我們在定義腳本的時候,除了 V 字開頭的腳本之外,還有一種 R 字開頭的腳本,V 字開頭的腳本只會執(zhí)行一次,而 R 字開頭的腳本,只要腳本內(nèi)容發(fā)生了變化,啟動時候就會執(zhí)行。
- 使用了 Flyway 之后,如果再想進行數(shù)據(jù)庫版本升級,就不用該以前的數(shù)據(jù)庫腳本了,直接創(chuàng)建新的數(shù)據(jù)庫腳本,項目在啟動時檢測了有新的更高版本的腳本,就會自動執(zhí)行,這樣,在和其他同事配合工作時,也會方便很多。因為正常我們都是從 Git 上拉代碼下來,不拉數(shù)據(jù)庫腳本,這樣要是有人更新了數(shù)據(jù)庫,其他同事不一定能夠收到最新的通知,使用了 Flyway 就可以有效避免這個問題了。
- 所有的腳本,一旦執(zhí)行了,就會在 flyway_schema_history 表中有記錄,如果你不小心搞錯了,可以手動從 flyway_schema_history 表中刪除記錄,然后修改 SQL 腳本后再重新啟動(生產(chǎn)環(huán)境不建議)。
配置
在 Spring Boot 中,關(guān)于 Flyway 也有不少配置,這些配置都在 application.properties 中進行配置,常用的幾個來和大家說下:
spring.flyway.enabled:是否開啟 flyway,默認就是開啟的
spring.flyway.encoding:flyway 字符編碼
spring.flyway.locations:sql 腳本的目錄,默認是 classpath:db/migration,如果有多個,用 , 隔開
spring.flyway.clean-disabled:這個屬性非常關(guān)鍵,它表示是否要清除已有庫下的表,如果執(zhí)行的腳本是 V1__xxx.sql,那么會先清除已有庫下的表,然后再執(zhí)行腳本,這在開發(fā)環(huán)境下還挺方便,但是在生產(chǎn)環(huán)境下就要命了,而且它默認就是要清除,生產(chǎn)環(huán)境一定要自己配置設(shè)置為 true。
spring.flyway.table:配置數(shù)據(jù)庫信息表的名稱,默認是 flyway_schema_history。