Flyway 是一個強大的數據庫版本控制和遷移工具,主要用于管理數據庫結構的變更和演進。
核心作用
1. 數據庫版本控制
- 追蹤數據庫變更:記錄每次數據庫結構的修改
- 版本管理:為每個變更分配版本號
- 變更歷史:完整記錄數據庫演進過程
2. 自動化數據庫遷移
- 腳本執行:自動執行SQL遷移腳本
- 順序控制:確保遷移腳本按正確順序執行
- 狀態跟蹤:記錄哪些腳本已執行,哪些待執行
主要功能特點
📁 遷移腳本管理
src/main/resources/db/migration/
├── V1__Create_user_table.sql
├── V2__Add_email_column.sql
├── V3__Create_order_table.sql
└── V4__Add_index_on_user_email.sql
命名規則
- V + 版本號 + 雙下劃線 + 描述
- 例:
V1.0.1__Create_user_table.sql
🔄 遷移類型
Versioned Migrations(版本遷移)
- 不可逆的結構變更
- 每個版本只執行一次
- 用于:創建表、添加列、修改結構
Repeatable Migrations(可重復遷移)
- 可重復執行的腳本
- 基于校驗和判斷是否需要重新執行
- 用于:視圖、存儲過程、函數
🎯 核心優勢
1. 環境一致性
- 開發環境 → 測試環境 → 生產環境
- 確保所有環境數據庫結構完全一致
- 避免環境差異導致的問題
2. 團隊協作
- 多人開發:避免數據庫變更沖突
- 代碼審查:SQL變更也可進行代碼審查
- 版本同步:團隊成員數據庫保持同步
3. 部署自動化
- CI/CD集成:自動化部署流程
- 零停機部署:支持滾動更新
- 回滾支持:可以回退到指定版本
工作原理
1. 元數據表
Flyway在數據庫中創建 flyway_schema_history
表:
-- 記錄遷移歷史
CREATE TABLE flyway_schema_history (installed_rank INT NOT NULL,version VARCHAR(50),description VARCHAR(200),type VARCHAR(20) NOT NULL,script VARCHAR(1000) NOT NULL,checksum INT,installed_by VARCHAR(100) NOT NULL,installed_on TIMESTAMP NOT NULL,execution_time INT NOT NULL,success BOOLEAN NOT NULL
);
2. 執行流程
- 掃描遷移腳本目錄
- 比較腳本與歷史記錄
- 執行未執行的腳本
- 記錄執行結果到元數據表
使用場景
🏢 企業級應用
- 微服務架構:每個服務獨立管理數據庫
- 多環境部署:開發、測試、預生產、生產
- 持續集成:自動化測試和部署
📊 數據庫演進
- 表結構變更:添加/刪除字段、修改類型
- 索引管理:創建/刪除索引優化性能
- 數據遷移:歷史數據清理和轉換
- 權限管理:用戶和角色權限調整
🔧 開發流程集成
# application.yml 配置示例
spring:flyway:enabled: truelocations: classpath:db/migrationbaseline-on-migrate: truevalidate-on-migrate: true
支持的數據庫
- PostgreSQL(您項目使用的)
- MySQL/MariaDB
- Oracle
- SQL Server
- SQLite
- DB2
- H2等
與項目的關系
Flyway可以:
1. 管理PostgreSQL結構
- K8s資源管理相關表結構
- 用戶權限和配置表
- 日志和監控數據表
2. 支持微服務部署
- 自動化數據庫初始化
- 支持容器化部署
- 與Spring Boot完美集成
3. 團隊協作效率
- 數據庫變更版本化
- 減少環境配置差異
- 簡化部署流程
總結:Flyway是現代應用開發中不可或缺的數據庫版本控制工具,特別適合企業級和微服務項目,能顯著提升開發效率和部署可靠性。