本文主要記錄一下使用flyway管理spring boot測試環境的數據庫(h2)
之前直接使用的spring.datasource裏面的schema和data屬性配置的,不過數據庫一直變更,每次都修改相關的配置文件太麻煩了,於是引入了flyway,進行版本管理,以後變更數據庫,可以直接添加高版本的配置文件即可。
添加gradle依賴
testCompile "org.flywaydb:flyway-core:5.2.4"
配置flyway
在application.yml文件中添加配置:
spring:
flyway:
enabled: true
locations: classpath:db/migration
baseline-on-migrate: true
baseline-version: 1
validate-on-migrate: true
- enabled: 默認true,spring boot啓動時自動進行flyway遷移
- locations: flyway相關數據庫文件的位置
- baseline-on-migrate:是否使用baseline,配合baseline-version使用,遷移的時候自動忽略版本號低於指定baseline-version的文件
- validate-on-migrate:對於每個遷移是否自動計算CRC32校驗和
在test下的resources目錄下面創建目錄:db/migration
在該目錄下創建flyway的相關數據庫配置文件,可以包括表的創建修改、表內數據的增刪改等。
文件的格式:
數據的遷移一共有三種類型:Versioned Migrations、Undo Migrations、Repeatable Migrations
- Versioned Migrations:以V開頭(可以在配置文件中進行自定義配置),然後緊跟版本號,版本號以 _或者.分隔,然後是分隔符 __ (兩個 _),之後是文件的描述信息(以下劃線或者空格分隔單詞),最後是文件後綴.sql。(可選的版本化遷移可以省略分隔符和描述信息)
- Undo Migrations:以U開頭(可以在配置文件中進行自定義配置),然後緊跟版本號,版本號以 _或者.分隔,然後是分隔符 __(兩個 _),之後是文件的描述信息(以下劃線或者空格分隔單詞),最後是文件後綴.sql。
- Repeatable Migrations:以R開頭(可以在配置文件中進行自定義配置),然後緊跟分隔符 __(兩個 _),之後是文件的描述信息(以下劃線或者空格分隔單詞),最後是文件後綴.sql。
樣例如下,我只使用了版本化遷移:
第一個文件初始化數據庫表,第二個文件初始化數據庫表的數據。
文件V1_1__initial_setup.sql:
DROP table if exists user;
create table user
(
user_key varchar(50) not null
primary key,
name varchar(100) not null,
description varchar(100) null,
email varchar(100) null,
photo varchar(100) null
);
文件V1_2__initial_data.sql:
INSERT INTO user (user_key, name, description) VALUES ('LG001', 'Lucy', 'A good girl');
然後啓動spring boot的測試時,將自動使用flyway進行數據庫的初始化操作。