目录
什么是Flyway?
为什么要使用Flyway?
SpringBoot集成Flyway
基本概念
1.Versioned Migrations
2.Repeatable Migrations
使用
其它
Flyway是一款开源的数据库版本管理工具,Flyway可以独立于应用实现管理并跟踪数据库的变更,Flyway根据自己的约定,不需要复杂的配置就可以实现数据的Migrate。Migrations可以写成SQL脚本,也可以写在Java代码中,Flyway还支持Spring Boot。
开源、简易、约定大于配置。
Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration.
官网:https://flywaydb.org/documentation/
不论是个人还是团队开发,总会面临着数据库表与数据不断变更的情况。面对这种情况,我们自然可以直接到数据库客户端或控制台中执行SQL。但这种操作是不优雅的,也没有引入版本管理的概念。Flyway很好地解决了这个问题,你可以做到每次在项目启动时,自动执行变更SQL脚本。
拥有版本、描述与校验和(checksum)三个基本信息,每次启动只执行需要变更的脚本。
拥有描述与校验和(checksum)两个基本信息,每次启动都会执行一遍所有相应的SQL。
maven:
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
org.flywaydb
flyway-core
properties:
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 如果指定 schema 包含了其他表,但没有 flyway schema history 表的话, 在执行 flyway migrate 命令之前, 必须先执行 flyway baseline 命令.
# 设置 spring.flyway.baseline-on-migrate 为 true 后, flyway 将在需要 baseline 的时候, 自动执行一次 baseline.
spring.flyway.baseline-on-migrate=true
#spring.flyway.locations=classpath:/db/migration
可以通过spring.flyway.locations配置修改脚本目录,默认的路径是:classpath:/db/migration
添加SQL脚本:
SQL脚本文件名有要求!!!
默认值 V 表示 Versioned, R 表示 Repeatable。然后双下划线+描述+后缀(默认.sql)。
最后启动项目就会执行相应Migration。
Ps:
prefix: 可配置,前缀标识,默认值 V 表示 Versioned, R 表示 Repeatable
version: 标识版本号, 由一个或多个数字构成, 数字之间的分隔符可用点.或下划线_
separator: 可配置, 用于分隔版本标识与描述信息, 默认为两个下划线__
description: 描述信息, 文字之间可以用下划线或空格分隔
suffix: 可配置, 后续标识, 默认为.sql
flyway 提供命令行工具, 常用的命令包括:
Clean: 删除所有创建的数据库对象, 包括用户、表、视图等. 注意不要在生产库上执行 clean 操作.
Migrate: 对数据库依次应用版本更改.
Info: 获取目前数据库的状态. 那些迁移已经完成, 那些迁移待完成. 所有迁移的执行时间以及结果.
Validate: 验证已 Apply 的脚本是否有变更, Flyway 的 Migration 默认先做 Validate.
Baseline: 根据现有的数据库结构生成一个基准迁移脚本.
Repair: 修复命令尽量不要使用, 修复场景有: 1. 移除失败的 migration 记录. 2.已经应用的 SQL 脚本被修改, 我们想重新应用该 SQL 脚本.