Flyway集成指南

image-20220704113359702

一. 什么是Flyway

flyway 是一个敏捷工具,用于数据库的移植。采用 Java 开发,支持所有兼容 JDBC 的数据库。

主要用于在你的应用版本不断升级的同时,升级你的数据库结构和里面的数据。

二. 为什么需要Flyway

在多人开发的项目中,我们都习惯了使用SVN或者Git来对代码做版本控制,主要的目的就是为了解决多人开发代码冲突和版本回退的问题。

其实,数据库的变更也需要版本控制,在日常开发中,我们经常会遇到下面的问题:

  • 自己写的SQL忘了在所有环境执行。
  • 别人写的SQL我们不能确定是否都在所有环境执行过了。
  • 有人修改了已经执行过的SQL,期望再次执行。
  • 需要新增环境做数据迁移。
  • 每次发版需要手动控制先发DB版本,再发布应用版本。
  • 其它场景。

三. Flyway 如何工作

  • 项目启动,应用程序完成数据库连接池的建立后,Flyway自动运行。
  • 初次使用时,flyway会创建一个 flyway_schema_history 表,用于记录sql执行记录
  • Flyway会扫描项目指定路径下(默认是 classpath:db/migration )的所有sql脚本,与 flyway_schema_history 表脚本记录进行比对。如果数据库记录执行过的脚本记录,与项目中的sql脚本不一致,Flyway会报错并停止项目执行。
  • 如果校验通过,则根据表中的sql记录最大版本号,忽略所有版本号不大于该版本的脚本。再按照版本号从小到大,逐个执行其余脚本。

四. SpringBoot集成

1. 依赖导入(Maven 方式)

1.1 新增 Properties版本号约束
<properties> 
    <flyway.version>8.5.13</flyway.version>
    <flyway-db.version>8.5.12</flyway-db.version>
</properties>
1.2 新增依赖
<dependencies>
		<dependency>
    		<groupId>org.flywaydb</groupId>
    		<artifactId>flyway-core</artifactId>
    		<version>${flyway.version}</version>
		</dependency>
		<dependency>
    		<groupId>org.flywaydb</groupId>
    		<artifactId>flyway-mysql</artifactId>
    		<version>${flyway-db.version}</version>
		</dependency>
</dependencies>

2. 配置文件导入

文件索引编号, 根据具体配置文件而定, 去当前最大索引值+1

  • bootstrap.properteis
# 关联flyway配置文件
spring.profiles.include=flyway
  • 新增配置文件 -> bootstrap-flyway.properties
# ================== [ Flyway Profile ] ==================
# 当迁移发现数据库非空并且没有元数据的表时, 自动执行基准迁移, 新建schema_version表
spring.flyway.baseline-on-migrate=true
# 是否启用
spring.flyway.enabled=true
# 文件魔码格式
spring.flyway.encoding=UTF-8
# 文件默认地址
spring.flyway.locations=classpath:db_migration
# 默认前缀
spring.flyway.sql-migration-prefix=V
# 默认分隔符
spring.flyway.sql-migration-separator=__
# 默认后缀
spring.flyway.sql-migration-suffixes=.sql
# 是否启动校验
spring.flyway.validate-on-migrate=true
# 禁用删表
spring.flyway.clean-disabled=true
# 自定义版本控制表名
spring.flyway.table=db_vcs

3. 新增配置文件夹

3.1. 新增本地SQL脚本存放文件夹

新增文件夹名称需要与配置项 [ spring.flyway.locations ] 保持一直

  • resources 目录下新增文件夹 db_migration
  • resources 目录下新增文件夹 1.0.0
3.2 新增初始化脚本SQL

此处以 saas_cloud_aggregation 库为例
image-20220704115852456

  • 导出指定数据库结构与数据 Structure+ Data
  • 存储为 V1.0.0__Init.sql
    • 文件结构描述, 所有sql文件都必须遵循以下所有规则
      • V -> 表示版本空值(大写)
      • 1.0.0 -> 表示版本号(不允许重复, 有小到大)
      • __ -> 双下划线, 表示分隔符 (需要与配置 [ spring.flyway.sql-migration-separator ] 保持一致)
      • Init -> 版本描述, 写能看懂的描述即可
      • .sql -> 文件后缀
  • 导出文件转移至 db_migration/${version} 文件夹下
  • 修改字符集编码为utf8mb4
    image-20220704150821829

4. 启动服务

  • 控制台日志打印, 出现此日志, 说明集成成功
    image-20220704141051404
  • 观察数据库
    image-20220704141154788
    image-20220704141213229
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值