如果你还在为不同环境的数据库表字段变动报错而烦恼,甚至简单粗暴的将开发库直接导出并导入sit甚至prod环境,建议一起来了解一下 Flyway 的用法。
概述
Flyway是一款数据库迁移(migration)工具。简单地说,flyway是一个能对数据库变更做版本控制的工具。使用 Flyway,对数据库的所有更改都称为迁移。迁移可以是版本化的或 可重复的。版本化迁移有两种形式:常规和撤消。
如何在一个 Spring Boot 项目中引入 Flyway
在 Spring Boot 项目中,引入 Flyway 非常简单,因为在 Spring Boot 的 spring-boot-autoconfigure 中包含了 Flyway 的自动配置,只要添加 flyway 的依赖即可。
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
命名
为了被 Flyway 采用,SQL 迁移必须符合以下命名模式:
文件名由以下部分组成:
- 前缀:
V
用于版本化迁移、U
撤消迁移、R
可重复迁移 - 版本:下划线(在运行时自动替换为点)分隔任意数量的部分(不适用于可重复的迁移)
- 分隔符:(
__
两个下划线) - 说明:下划线(运行时自动替换为空格)分隔单词
- 后缀:
.sql
文件路径:classpath:db/migration
基本的yaml配置
spring:
flyway:
# 是否启用flyway
enabled: true
#若启动环境中的的数据库中有数据,但是没有flyway的历史表时,
#false--启动会报错,true--继续生成flyway历史表完成脚本
baseline-on-migrate: true
# 执行时标记的tag 默认为<<Flyway Baseline>>
baseline-description: <<Flyway Baseline>>
# 检测迁移脚本的路径是否存在,如不存在,则抛出异常
check-location: false
# 脚本位置
locations: classpath:db/migration
# 在迁移时,是否校验脚本,假设V1.0__初始.sql已经迁移过了,在下次启动时会校验该脚本是否有变更过,则抛出异常
validate-on-migrate: false