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:
然後在application.yml中對flyway進行配置,配置項路徑spring-flyway:
主要就是腳本檔案位置(locations),資料庫中的表名(table)等,資料庫的相關配置如果不配置會自動引用配置檔案中的datasource配置,其他具體配置項釋義可參見本文後續。配置檔案配置好後,啟用項目flyway會自動建立記錄執行情況的資料表:
在使用時,開發人員可以在配置的腳本檔案路徑下建立sql腳本檔案,檔案命名格式
采用預設格式“V{版本号}__{描述}.sql”:
這樣啟用程式時,flyway會根據記錄表中記錄的版本号和執行情況選擇要執行的sql腳本檔案并在記錄表中添加執行記錄,完成資料遷移:
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/