1. 程式人生 > >springboot 使用 flyway 進行資料庫版本管理

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/mysqlMySQL)設定要使用的資料夾。支援的資料庫列表可在以下位置找到DatabaseDriver

FlywayProperties 提供了大部分Flyway的設定和一小組附加屬性,可用於禁用遷移或關閉位置檢查。如果您需要更多控制配置,請考慮註冊FlywayConfigurationCustomizer bean。

Spring Boot呼叫Flyway.migrate()以執行資料庫遷移。如果您想要更多控制權,請提供@Bean實施方案 FlywayMigrationStrategy

Flyway支援SQL和Java 回撥。要使用基於SQL的回撥,請將回調指令碼放在該classpath:db/migration 資料夾中。要使用基於Java的回撥,請建立一個或多個實現的bean Callback。任何此類bean都會自動註冊Flyway。它們可以通過使用@Order或實施來訂購OrderedFlywayCallback也可以檢測實現已棄用介面的Bean ,但它們不能與Callbackbean 一起使用。

預設情況下,Flyway會在您的上下文中自動裝配(@PrimaryDataSource並將其用於遷移。如果您想使用其他的DataSource,可以建立一個並將其標記@Bean@FlywayDataSource。如果您這樣做並想要兩個資料來源,請記住建立另一個數據源並將其標記為@Primary。或者,您可以DataSource通過設定spring.flyway.[url,user,password] 外部屬性來使用Flyway的原生。設定任何一個spring.flyway.urlspring.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配置檔案處於活動狀態時才會