以往的習慣,都要建一個 SQL 的目錄,來記錄 table schema 做了什麼樣的修改,才能確認 schema 的版本,但如果共同開發的話,還是常有人會修改了卻忘了 commit 修改的內容造成 schema 的不一致
Flyway 提供管理 SQL 指令碼,在 Spring boot 啟動時自動執行預設路徑的 SQL 指令
Flyway
Spring boot 專案設定
gradle 新增 dependencies
- org.springframework.boot:spring-boot-starter-jdbc (沒有的話要新增)
- org.flywaydb:flyway-core
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.flywaydb:flyway-core'
}
在目錄 db.migration 下新增執行的 SQL 檔案
SQL 檔名格式如下
- Prefix: V : version, U: undo, R: repeatable
- Version: 數字和 dots 組合, ex: 2, 2.1 ...etc
- Separator: __ (兩個底線)
- Description: 字串和 _ (一個底線)組成
- Suffix: .sql
在 spring boot 啟動後,會自動執行 SQL
且會自動建立一個 table: flyway_schema_history
select table 內容可以看見剛才執行的 sql 已被記錄
下次啟動時會去比對 flyway_schema_history 的記錄,如果已被執行則不會再執行
很好用的工具,即使換了個環境,只要重新啟動 spring boot 就可以將應該執行的 SQL 全部執行完畢了