Flyway学习笔记

一、Flyway介绍

实习过程中遇到开发数据库和生产数据库同步的需求,经组里大佬的提醒,去学习了FlyWay Java 数据库移植框架

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

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

二、Flyway的使用 

测试环境使用了 Springboot3.3.1 +jdk17+ Mysql 8 

2.1 Maven依赖导入

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-mysql</artifactId>
</dependency>

2.2 配置文件

属性作用

enabled

是否启用flyway

table

指定记录版本记录的数据表,缺省时默认flyway_schema_history

encoding

SQL 迁移的编码

baseline-on-migrate

指定的记录表不存在时,会自动创建,并插入一条基线记录,作为后续迁移脚本的笨笨基准

locations

指定迁移脚本所在文件夹

sql-migration-prefix

迁移脚本的文件名前缀

sql-migration-suffix

迁移脚本的文件名后缀

validate-on-migrate

迁移时是否校验脚本

check-location

迁移时是否校验脚本所在位置,位置不存在会抛异常信息
clean-disabled是否禁用clean命令,clean命令会清空数据库,在生产环境必须禁用

2.3 迁移脚本

flyway提供了三种类型的sql

①版本迁移sql

②可重复运行sql

③错误回滚sql

脚本的命名规则:

1、版本迁移SQL命名以大写的"V"开头,V+版本号(版本号的数字间以”.“或”_“分隔开)+双下划线(用来分隔版本号和描述)+文件描述+后缀名。例如:  V1.1.1__create_user.sql 。
2、可重复运行的SQL,则以大写的“R”开头,后面再以两个下划线分割,其后跟文件名称,最后以.sql结尾。比如: R__clean_cache.sql 。

3、错误回滚SQL以afterMigrateError开头,后面再以两个下划线分割,其后跟文件名称,最后以.sql结尾。比如:afterMigrateError__repair.sql

脚本的执行规则:

1、以大写"V"开头的版本迁移SQL,会根据版本号与信息记录表中最新执行的SQL版本号进行对比,判断是否需要执行。
2、以大写的“R”开头的可重复运行的SQL,flyway会计算SQL文件的校验和,判断文件是否修改,每次文件变动后,脚本都会执行。

3、错误回滚SQL会在脚本执行失败后执行,一般用于错误信息的修复,比如删除信息记录表中的错误执行记录。

三、使用过程中遇到的问题

3.1 依赖冲突问题

flyway-core 与 flyway-mysql 会出现依赖冲突,flyway-mysql内部已经有flyway-core的依赖

3.2 迁移脚本的版本问题

一个版本只能对应一个迁移文件,若存在同版本的脚本文件,Flyway初始化会失败

3.3 版本迁移时sql脚本出错的处理办法

在这里,我使用的是在afterMigrateError__repair.sql脚本中删除执行失败的记录,这样既不用手动去数据库处理异常,也可以看到抛出的异常信息。

DELETE FROM flyway_schema_history WHERE success=false;

3.4  版本迁移SQL的生成

编写迁移脚本的重点就是比较测试数据库与生成数据库的差异,JPA就可以很好的满足这点。

使用时需要先注入依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

并在IDEA中安装JPA Buddy插件

上述步骤完成后,IDEA会出现JPA的图标

即可使用其提供的Flyway Versioned Migration工具分析数据库的差异,生成迁移脚本

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值