1. 程式人生 > >Spring Boot 學習筆記 10 : Flyway 異常

Spring Boot 學習筆記 10 : Flyway 異常

最近使用 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 的目錄中的指令碼檔案。

錯誤示例:

warn

正確示例:

info

org.flywaydb.core.api.FlywayException: Validate failed: Detected failed migration to version 2 (mysql-schema) 異常

在執行 V2__mysql-schema.sql 指令碼時由於建表沒有設定主鍵自增,插入資料丟擲異常導致 Flyway 遷移失敗。

schema-version

當我再次執行程式時丟擲異常:

detected failed migration

這時候刪除 schema_version 表即可。

org.flywaydb.core.api.FlywayException: Validate failed: Detected applied migration not resolved locally: 2 異常

detected applied migration

出現異常的原因是我在 V2__mysql-schema.sql 指令碼檔案未作任何內容修改的情況下將指令碼檔名稱更改為 V2.1__mysql-schema.sql