天天看點

Flyway:簡化資料遷移以适應靈活開發

Flyway是一個開源的資料庫遷移架構,可以幫助開發人員自動化管理資料庫結構和預置資料的變更,減少手動資料遷移,進而提高開發效率和資料庫管理的可靠性。

靈活開發是一種快速疊代的軟體開發方法,需要快速地驗證和測試新功能并快速部署。在這種情況下,資料庫遷移工具是必不可少的。Flyway作為一種開源的資料庫遷移工具,它可以輕松地管理資料庫遷移,讓開發人員專注于新功能的開發和部署。浪潮海嶽物聯網平台inIoT産品使用flyway工具,在産品開發和項目部署過程中進行了資料庫遷移管理,提高了開發效率,減少了實施人員在更新疊代産品過程中的工作量,并且保障了資料庫遷移的準确性和安全性。下面将從flyway原理、特點介紹flyway為何能适應靈活開發模式,并簡要介紹flyway的用法。

Flyway原理

Flyway的核心原理是基于資料庫版本控制,将資料庫的變更分為多個版本,每個版本都對應着一組DDL和DML語句,通過版本控制工具來管理這些語句的執行。這也契合了靈活開發疊代的理念。

Flyway特點

1. 簡單易用:flyway 是一個輕量級的資料庫遷移工具,易于安裝和使用。它提供了簡單的指令行界面和 API,使得開發人員可以輕松地內建到他們的項目中。例如springboot中,隻需要引入flyway,然後在配置檔案對一些配置項進行修改就可以進行資料遷移了。

2. 易于跟蹤: flyway 提供了版本控制,使得開發人員可以輕松地跟蹤資料庫的變化。這使得團隊可以更加協作,同時也可以更好地了解和管理資料庫的變化。

3. 自動化: flyway 可以自動化執行資料庫遷移,這使得靈活開發團隊可以更快地開發新功能,同時也可以更容易地進行測試和部署。在靈活開發中不頻繁使用手動資料遷移,也提高了資料庫管理的可靠性。

4. 可重複性: flyway 可以確定資料庫遷移是可重複的,這意味着在不同的環境中使用相同的遷移腳本會産生相同的結果。這消除了很多與資料庫變化相關的問題,進而提高了靈活開發的效率和可靠性。

Flyway的用法

使用Flyway進行資料庫遷移隻需要以下幾個步驟:

1. 引入Flyway依賴:首先需要在項目中引入Flyway的依賴,可以通過Maven或Gradle來管理依賴。

2. 配置資料源:Flyway需要通過資料源來連接配接資料庫,是以需要在配置檔案中配置資料源相關資訊,如資料庫URL、使用者名和密碼等。

3. 建立遷移腳本:根據資料庫變更的需要,建立相應的遷移腳本。遷移腳本必須按照嚴格的命名規則來命名,以便Flyway能夠自動識别和執行。命名規則是“V{版本号}__{描述}.sql”,其中版本号是一個整數,描述是一個簡短的描述,用于描述這個遷移腳本所做的變更。

4. 執行遷移腳本:在應用啟動時,Flyway會自動檢測資料庫中已經執行的版本,然後按照版本号的順序執行尚未執行的版本,并在資料庫中記錄本次執行的版本号及結果,最終将資料庫結構更新到最新版本。

5. 在具體實踐過程:配合springboot和maven,首先我們在pom中引用flyway:

Flyway:簡化資料遷移以适應靈活開發

然後在application.yml中對flyway進行配置,配置項路徑spring-flyway:

Flyway:簡化資料遷移以适應靈活開發

主要就是腳本檔案位置(locations),資料庫中的表名(table)等,資料庫的相關配置如果不配置會自動引用配置檔案中的datasource配置,其他具體配置項釋義可參見本文後續。配置檔案配置好後,啟用項目flyway會自動建立記錄執行情況的資料表:

Flyway:簡化資料遷移以适應靈活開發

在使用時,開發人員可以在配置的腳本檔案路徑下建立sql腳本檔案,檔案命名格式

采用預設格式“V{版本号}__{描述}.sql”:

Flyway:簡化資料遷移以适應靈活開發

這樣啟用程式時,flyway會根據記錄表中記錄的版本号和執行情況選擇要執行的sql腳本檔案并在記錄表中添加執行記錄,完成資料遷移:

Flyway:簡化資料遷移以适應靈活開發

6. Flyway配置項釋義

flyway.url 指定要連接配接的JDBC URL,必需項。
flyway.user 指定連接配接資料庫的使用者名,必需項。
flyway.password 指定連接配接資料庫的密碼,必需項。
flyway.driver 指定JDBC驅動類名,如果不指定則會自動檢測。
flyway.locations 指定SQL腳本的位置,可以是classpath、檔案系統路徑或URL。
flyway.schemas 指定要操作的資料庫schema,可以是單個schema或多個schema,多個schema之間使用逗号分隔。
flyway.table 指定flyway管理資料的表名,預設為schema_version。
flyway.outOfOrder 指定是否允許執行不按順序的migration,預設為false。
flyway.baselineOnMigrate 指定是否在第一次執行migration時,執行baseline操作。
flyway.baselineVersion 指定baseline的版本号,預設為1。
flyway.baselineDescription 指定baseline的描述資訊。
flyway.placeholderPrefix 指定占位符的字首,預設為${。
flyway.placeholderSuffix 指定占位符的字尾,預設為}。
flyway.placeholders 指定占位符的值,多個占位符之間使用逗号分隔。
flyway.sqlMigrationPrefix 指定SQL腳本migration的字首,預設為V。
flyway.sqlMigrationSuffix 指定SQL腳本migration的字尾,預設為.sql。
flyway.repeatableSqlMigrationPrefix 指定可重複的SQL腳本migration的字首,預設為R。
flyway.target 指定要更新到的目标版本号,預設為最新版本。
flyway.cleanOnValidationError 指定在校驗migration時出現錯誤時是否清空資料庫,預設為false。
flyway.cleanDisabled 指定是否禁用clean操作,預設為false。
flyway.encoding 指定SQL腳本的編碼,預設為UTF-8。
flyway.validateOnMigrate 指定是否在執行migration時校驗SQL腳本的正确性,預設為true。
flyway.ignoreMissingMigrations 指定是否忽略缺失的migration,預設為false。
flyway.ignoreIgnoredMigrations 指定是否忽略被忽略的migration,預設為false。
flyway.ignorePendingMigrations 指定是否忽略未執行的migration,預設為false。
flyway.ignoreFutureMigrations 指定是否忽略未來的migration,預設為false。
flyway.errorOverrides 指定錯誤覆寫的規則,可以是warn、ignore、abort。
flyway.skipDefaultCallbacks 指定是否跳過預設的callback,預設為false。
flyway.callbacks 指定自定義的callback,多個callback之間使用逗号分隔。
flyway.skipDefaultResolvers 指定是否跳過預設的resolver,預設為false。
flyway.resolvers 指定自定義的resolver,多個resolver之間使用逗号分隔。
flyway.skipDefaultMigrations 指定是否跳過預設的migration,預設為false。
flyway.mixed 指定是否允許使用Java和SQL混合的migration,預設為false。
flyway.batch 指定是否啟用批處理操作,預設為false。
flyway.outputQueryResults 指定是否輸出查詢結果,預設為false。
flyway.makeSchemas 指定是否建立指定的schema,預設為true。
flyway.initSql 指定初始化資料庫時執行的SQL語句。
flyway.errorOnMissingBaseline 指定是否在找不到baseline時報錯,預設為false。
flyway.errorOnOutOfOrder 指定是否在發現migration不按順序時報錯,預設為false。
flyway.errorOnValidate 指定是否在校驗migration時發現錯誤時報錯,預設為false。

最後插個安利:inBuilder 低代碼平台開源社群版,免費下載下傳,免費使用,歡迎體驗:https://ibc.inspures.com/

繼續閱讀