一 概述
FlyWay是独立于数据的应用,管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,FlyWay可以像Git管理不同的人的代码那样,管理不同人的SQL脚本,从而做到数据库同步。
二 FlyWay使用好处与所需依赖
在我们的日常开发中,存在多人开发的时候,此时我们会借助Git来实现对代码进行版本控制,这样可以很好的解决多人开发代码冲突和版本回退的问题。
其实在多人协同开发过程中,对数据库的变更也是需要版本控制的,这样可以避免一下问题:
- 自己在开发过程中忘记将SQL在需要的地方执行。
- 无法判断团队其他人写的SQL是否全部执行。
- 当其他人修改了已经执行过的SQL,期望再次执行。
- 对新增的环境进行数据迁移。
- 每次进行应用的版本迭代时,需要先手动控制保证DB版本更新,最后再发布应用版本。
FlyWay所需的依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.2.4</version>
</dependency>
三 FlyWay的使用
新建一个空的数据库(DataBase)或者Schema
在SpringBoot项目中的配置文件application.yml中进行数据库配置
spring:
# main:
# allow-bean-definition-overriding: true
datasource: #数据库配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/family?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8
username: root
password: ********
#hikari数据库连接池
hikari:
pool-name: Retail_HikariCP
minimum-idle: 5 #最小空闲连接数量
idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟)
maximum-pool-size: 10 #连接池最大连接数,默认是10
auto-commit: true #此属性控制从池返回的连接的默认自动提交行为,默认值:true
max-lifetime: 1800000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000
connection-test-query: SELECT 1
在项目的src/main/resources目录下新建db.migration文件夹
默认情况下,该目录下的.sql文件就是需要被flyway做版本控制的数据库SQL语句。
四 Flyway对应的SQL命名规则
- 仅需要被执行一次的SQL命名以大写的"V"开头,后面跟上"0~9"数字的组合,数字之间可以用“.”或者下划线"_"分割开,然后再以两个下划线分割,其后跟文件名称,最后以.sql结尾。比如,
V2.1.6__create_user_ddl.sql
、V2.1.8__add_user_dml.sql
。 - 可重复运行的SQL,则以大写的“R”开头,后面再以两个下划线分割,其后跟文件名称,最后以.sql结尾。。比如,
R__alter_user_dml.sql
。
其中,V开头的SQL执行优先级要比R开头的SQL优先级高。