本文主要记录一下使用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进行数据库的初始化操作。