整天跟資料庫打交道的程式設計師都知道,當資料庫的Schema發生改變時是多麼痛苦的事情。尤其是一個在不斷開發完善的專案,隨著需求變化,資料庫的schema也會跟著變化,而追蹤記錄這些變化一向都是費時費力。如果你擁有多個測試環境,那麼保證這些環境下的資料庫的一致性的難度會成倍增加。
Flyway,一款小工具,應用它能夠大大簡化這方面的工作。
它的優點:
convention over configuration,配置簡單,使用方便;支援Sql及Java配置;
支援當前幾乎所有的主流資料庫;
擁有命令列工具、Maven、Gradle外掛….應用場景廣泛。
使用它之前先要了解一些概念:
版本:對資料庫的每一次變更可稱為一個版本。
遷移:Flyway把資料庫結構從一個版本更新到另一個版本叫做遷移。
可用的遷移:Flyway的檔案系統識別出來的遷移版本。
已經應用的遷移:Flyway已經對資料庫執行過的遷移。
如何使用:
以Sql配置舉例,建立一個資料夾用來存放所有資料庫修改記錄。
每次修改以’V版本號__描述.sql’的方式命名。比如V1__initial_version.sql, V2.1__create_table.sql,V2015.01.05__drop_view.sql
Flyway會根據檔名自動識別版本順序,並根據這些版本順序來應用資料庫修改。
配置
以使用Flyway的命令列工具為例。安裝命令列工具後,執行時Flyway會根據以下路徑來尋找配置檔案。
安裝目錄/conf/flyway.properties
使用者目錄/flyway.properties
當前目錄/flyway.properties
或者直接在命令列使用 -configFile=myfile.properties
來指定檔案。
配置檔案的一個示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
命令列工具的幾個命令:
Clean: 刪除所有建立的資料庫物件,包括使用者、表、檢視等。
Migrate: 對資料庫依次應用版本更改。
Info:獲取目前資料庫的狀態。那些遷移已經完成,那些遷移待完成。所有遷移的執行時間以及結果。
Validate:驗證資料庫結構與遷移指令碼的異同。
Baseline:根據現有的資料庫結構生成一個基準遷移指令碼。
進階
flyway提供sql配置和Java配置兩種方式。sql配置可以方便實現對DDL的修改、一些引用資料的修改;而Java的方式則更強大些,可以應用更為複雜的場景,比如對某個資料表中的資料進行一些邏輯處理。具體使用請參見官方文件:(http://flywaydb.org/documentation/migration/java.html)http://flywaydb.org/documentation/migration/java.html
熟悉Ruby On Rails的程式設計師都知道Ruby On Rails自帶一個資料庫遷移工具,這個和那個差不多,可以說下JVM平臺的資料庫遷移工具,彌補了JVM平臺下維護資料庫Schema的不足。