Spring Boot 學習筆記 10 : Flyway 異常
阿新 • • 發佈:2019-01-26
最近使用 SpringBoot 整合 Mybatis 開發專案,關於資料庫表結構的生成決定採用 Flyway 或者 Liquibase 這樣的資料庫版本工具,或者叫資料庫遷移工具。在使用 Flyway 的過程中,遇到一些問題先記錄下來。
在 application.properties 檔案中配置 Flyway
## 是否啟用flyway
flyway.enabled=true
## 編碼格式,預設UTF-8
flyway.encoding=UTF-8
## 遷移sql指令碼檔案存放路徑,預設db/migration
flyway.locations=db/migration
## 遷移sql指令碼檔名稱的字首,預設V
flyway.sql-migration-prefix=V
## 遷移sql指令碼檔名稱的分隔符,預設2個下劃線__
flyway.sql-migration-separator=__
## 遷移sql指令碼檔名稱的字尾
flyway.sql-migration-suffix=.sql
## 遷移時是否進行校驗,預設true
flyway.validate-on-migrate=true
## 將schema_version表從資料庫刪除後丟擲異常
## Caused by: org.flywaydb.core.api.FlywayException:
## Found non-empty schema(s) `nmg-crm` without metadata table!
## Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
## 設定為true,當遷移發現數據庫非空且存在沒有元資料的表時,自動執行基準遷移,新建schema_version表
flyway.baseline-on-migrate=true
Unable to resolve location classpath:db/migration
警告
使用預設配置,Flyway 會自動去尋找 db/migration 目錄下的遷移指令碼檔案,如果你使用的是 IDEA 開發工具,需要注意的是 db 目錄下的 migration 目錄中的指令碼檔案,而不是名稱為 db.migration 的目錄中的指令碼檔案。
錯誤示例:
正確示例:
org.flywaydb.core.api.FlywayException: Validate failed: Detected failed migration
to version 2 (mysql-schema) 異常
在執行 V2__mysql-schema.sql 指令碼時由於建表沒有設定主鍵自增,插入資料丟擲異常導致 Flyway 遷移失敗。
當我再次執行程式時丟擲異常:
這時候刪除 schema_version 表即可。
org.flywaydb.core.api.FlywayException: Validate failed: Detected applied migration
not resolved locally: 2 異常
出現異常的原因是我在 V2__mysql-schema.sql
指令碼檔案未作任何內容修改的情況下將指令碼檔名稱更改為 V2.1__mysql-schema.sql
。