Flyway使用教程
背景: 在开发环境对多个不同版本的分支进行开发,如果此时涉及到多张表结构修改(比如新增字段),而在测试环境时却忘了整理SQL 脚本给测试人员执行,就会导致出现 bug,从而影响测试的工作效率。笔主所在公司是主要是通过人工维护来执行数据库脚本的,很多时候都会出现遗漏脚本的情况。针对这种情况,我们引入了Flyway来进行脚本管理。
简介: Flyway是一款开源的数据库版本管理工具,可以实现管理并跟踪数据库变更,支持数据库版本自动升级,而且不需要复杂的配置,能够帮助团队更加方便、合理的管理数据库变更。
原理: 通过对比校验和
来判断脚本是否有变更
脚本命名规则
1、仅需要执行一次的,以大写 V
开头,V + 版本号 + " __
" (两个下划线) + 文件描述 + 后缀名(一般是.sql
)
2、需要执行多次的,以大写“R
”开头,命名如 R__clean.sql ,R
的脚本只要改变了就会执行, R不带版本号
3、V开头的比R开头的优先级要高
注意: 版本号间的数字以 .
或者 _
分隔开, _
会自动编译成 .
整合springboot
<spring-boot.version>2.6.13</spring-boot.version>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.2.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
yml配置
spring:
flyway:
# 是否开启flywary,默认true
enabled: true
#迁移时是否校验,默认为true
validate-on-migrate: true
#是否允许无序的迁移,默认false
out-of-order: false
#迁移脚本的位置,默认db/migration.
locations: classpath:db/migration
# metadata 版本控制信息表 默认 flyway_schema_history
table: flyway_schema_history
# 如果没有 flyway_schema_history 这个 metadata 表, 在执行 flyway migrate 命令之前, 必须先执行 flyway baseline 命令
# 设置为 true 后 flyway 将在需要 baseline 的时候, 自动执行一次 baseline
baseline-on-migrate: true
# 指定 baseline 的版本号,默认值为 1, 低于该版本号的 SQL 文件, migrate 时会被忽略
baseline-version: 1
#设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
schemas: flyway,test
#设置迁移时的编码,默认UTF-8
encoding: UTF-8
# flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉
clean-disabled: true
datasource:
url: jdbc:mysql://localhost:3306/flyway
username: root
password: xxxxxxx
driver-class-name: com.mysql.cj.jdbc.Driver
创建需要迁移的脚本
V1_2_5__INSERT.sql
内容如下
INSERT INTO `test`.`tmsaj` (`cbh`, `ajmc`, `jbfy`, `cdsr`) VALUES ('01001c91c61fe64dc0643b99e575fd75', '1024', 6837069, 'Eleanor Williams');
启动后,数据库会新建flyway_schema_history
(版本控制信息表),并且有执行的版本记录
官方文档:https://documentation.red-gate.com/fd/quickstart-how-flyway-works-184127223.html?_gl=1*bqppmo*_ga*NTk1MjQ4MDAxLjE3MTQ4NzIxMjY.*_ga_X7VDRWRT4P*MTcxNDg3MjEyNi4xLjEuMTcxNDg3MjIzOS40My4wLjA.