springboot 使用 flyway 進行資料庫版本管理
要在啟動時自動執行Flyway資料庫遷移,請將其新增 org.flywaydb:flyway-core
到類路徑中。
遷移是表單中的指令碼V<VERSION>__<NAME>.sql
(使用<VERSION>
下劃線分隔的版本,例如“1”或“2_1”)。預設情況下,它們位於名為的資料夾中classpath:db/migration
spring.flyway.locations
。這是一個或多個classpath:
或filesystem:
位置的逗號分隔列表。例如,以下配置將在預設類路徑位置和/opt/migration
目錄中搜索指令碼:
spring.flyway.locations = classpath:db / migration,filesystem:/ opt / migration
您還可以新增特殊{vendor}
佔位符以使用特定於供應商的指令碼。假設如下:
spring.flyway.locations = classpath:db / migration / {vendor}
db/migration
前面的配置不是使用,而是根據資料庫的型別(例如db/migration/mysql
MySQL)設定要使用的資料夾。支援的資料庫列表可在以下位置找到DatabaseDriver
。
FlywayProperties
提供了大部分Flyway的設定和一小組附加屬性,可用於禁用遷移或關閉位置檢查。如果您需要更多控制配置,請考慮註冊FlywayConfigurationCustomizer
bean。
Spring Boot呼叫Flyway.migrate()
以執行資料庫遷移。如果您想要更多控制權,請提供@Bean
實施方案 FlywayMigrationStrategy
Flyway支援SQL和Java 回撥。要使用基於SQL的回撥,請將回調指令碼放在該classpath:db/migration
資料夾中。要使用基於Java的回撥,請建立一個或多個實現的bean Callback
。任何此類bean都會自動註冊Flyway
。它們可以通過使用@Order
或實施來訂購Ordered
。FlywayCallback
也可以檢測實現已棄用介面的Bean ,但它們不能與Callback
bean 一起使用。
預設情況下,Flyway會在您的上下文中自動裝配(@Primary
)DataSource
並將其用於遷移。如果您想使用其他的DataSource
,可以建立一個並將其標記@Bean
為@FlywayDataSource
。如果您這樣做並想要兩個資料來源,請記住建立另一個數據源並將其標記為@Primary
。或者,您可以DataSource
通過設定spring.flyway.[url,user,password]
外部屬性來使用Flyway的原生。設定任何一個spring.flyway.url
或spring.flyway.user
足以使Flyway使用它自己的DataSource
。如果未設定三個屬性中的任何一個,spring.datasource
則將使用其等效屬性的值。
有一個Flyway示例,您可以看到如何設定。
您還可以使用Flyway為特定方案提供資料。例如,您可以放置特定於測試的遷移,src/test/resources
並且僅在應用程式啟動測試時才執行它們。此外,您可以使用特定於配置檔案的配置進行自定義,spring.flyway.locations
以便某些遷移僅在特定配置檔案處於活動狀態時執行。例如,在中application-dev.properties
,您可以指定以下設定:
spring.flyway.locations = classpath:/ db / migration,classpath:/ dev / db / migration
使用該設定,dev/db/migration
僅在dev
配置檔案處於活動狀態時才會