Flyway 数据库版本管理工具
1.核心pom文件
<!--flyway数据库版本工具依赖-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.0</version>
</dependency>
springboot初始化数据源依赖
作用:flyway可以直接使用项目datasource
<!--Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--SpringBoot.jdbc数据源连接-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2.flyway配置文件
spring:
# 数据库连接配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: xxxx
password: xxxx
flyway:
# 是否启用flyway
enabled: true
# 编码格式,默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径,默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀,默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验,默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baseline-on-migrate: true
3.flyway创建执行脚本文件
在src/resources
下创建 db/migration
目录
执行脚本文件类型:
- V1.0.0__desc.sql 版本迁移
- U1.0.1__desc.sql 版本回退
- R__desc.sql 可重复执行,文件修改后可再次执行
V表示迁移、U表示回退、R表示可重复执行;
且V和U后可拼接1.0.0(举例)
版本号信息、R不可跟版本信息;
__
分隔符(两个下划线);
desc
为自定义描述信息
4.启动执行
首次运行数据库会创建flyway_schema_history
数据库执行历史版本记录。
版本记录数据截图如下:
分析:
我理解的flyway的优势
在于不同环境之前数据库表结构的自动同步,易追踪,版本记录可查。
举个栗子:a在dev环境修改了数据库表结构,a在部署项目到test环境运行时候某个功能发生报错。排查日志后确认是由于a在dev环境的数据库更新结构之后未到test环境进行更新。