【悬溺】Flyway的纯爱时刻

文档背景

由于维护项目的哥们们技术水平参差不齐,长短不一。故做此篇文章。多点纯爱,这个世界需要纯爱战士!

你好

Flyway是一款开源的数据库版本管理工具,他可以很方便的在命令行中使用,或者在java应用程序中引入,用于管理我们的数据库版本。


Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。Flyway支持SQL和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flyway来管理这些脚本的执行,这些脚本被Flyway称之为migration。


再简单的说。SQL这个东西原本要你动,现在让SQL上来自己动。

Demo地址

SpringBoot版:https://gitee.com/yi-yunlong/flyway-springboot.git
SpringMVC版:https://gitee.com/yi-yunlong/flyway_springmvc.git

Flyway的CPU时刻(工作流程)

  1. 项目启动,应用程序完成数据库连接池的建立之后,Flyway自动运行。(给Flyway提供情绪价值)
  2. 初次使用时,Flyway会创建一个flyway_schema_history 表,用于记录sql执行记录。(Flyway会牢记所有纯爱时刻)
  3. Flyway会扫描项目指定路径下(默认是 classpath:db/migration )的所有sql脚本,与 flyway_schema_history
    表脚本记录进行比对。如果数据库记录执行过的脚本记录,与项目中的sql脚本不一致,Flyway会报错并停止项目执行。(Flyway会反思自己哪里做的不对,随时undo撤回到任意纯爱时刻)
  4. 如果校验通过,则根据表中的sql记录最大版本号,忽略所有版本号不大于该版本的脚本。再按照版本号从小到大,逐个执行其余脚本。(假如换了对象,如果看对眼了,也不过是再体验一遍纯爱时刻罢了)

她在哪

添加依赖 (可以去Maven中央仓库搜到对应版本的Maven坐标)

<!-- flyway -->
<dependency>
	<groupId>org.flywaydb</groupId>
	<artifactId>flyway-core</artifactId>
	<version>5.2.0</version>
</dependency>

添加插件(同样的,逐一版本)

<!--
	方式三:通过mvn命令执行

	flyway插件,可执行mvn flyway:clean、mvn flyway:migrate、mvn flyway:info、mvn flyway:validate、mvn flyway:baseline、mvn flyway:repair
	clean:把整个库所有的表结构清空
	migrate:把数据库表版本更新到最新,自动检查数据库脚本是否有变化,如果有变化,则执行脚本,更新数据库版本,如果数据库初始状态是空库,则会自动创建flyway_schema_history表,用于存储数据库操作的版本记录,只要数据库脚本有变化,都需要执行此命令。
	info:打印flyway_schema_history中记录信息
	validate:指验证当前数据库是否最新版本,或者已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。也就是说已经执行过的sql文件是否被修改过,如果有,执行mvn flyway:validate会输出ERROR错误
	baseline:Baseline 是指数据库非空状态下使用flyway首先执行的命令,用于创建flyway_schema_history表
	repair:Repair会修复Metadata表的错误,通常有两种用途:
			1、移除失败的Migration记录,该问题只是针对不支持DDL事务的数据库。
			2、重新调整已经应用的Migratons的Checksums值
-->
<plugin>
	<groupId>org.flywaydb</groupId>
	<artifactId>flyway-maven-plugin</artifactId>
	<version>5.2.0</version>
	<configuration>
		<user>root</user>
		<password>root</password>
		<driver>com.mysql.cj.jdbc.Driver</driver>
		<url>jdbc:mysql://127.0.0.1:3306/flyway_demo?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=Hongkong</url>
	</configuration>
</plugin>

Flyway的使用流程

  1. 先将SQL文件存储写在resource/db/migration目录下(这个目录是默认配置)
    在这里插入图片描述
  1. 命名规则
    命名规则要按照,严格的规则去命名。以V开头当天时间 + 点 + 第几个SQL的数组 + 双横杠 + 表名 + SQL类型 + .sql后缀
    类似 V20181023.1__test_person_DDL.sql
    在这里插入图片描述

插件指令详解

  1. migrate
    Migrate是指把数据库Schema迁移到最新版本,是Flyway工作流的核心功能,Flyway在Migrate时会检查Metadata(元数据)表,如果不存在会创建Metadata表,Metadata表主要用于记录版本变更历史以及Checksum之类的

  2. baseline
    Baseline针对已经存在Schema结构的数据库的一种解决方案,即实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。
    Baseline可以应用到特定的版本,这样在已有表结构的数据库中也可以实现添加Metadata表,从而利用Flyway进行新Migrations的管理了

  3. clean(慎用)
    Clean相对比较容易理解,清除掉对应数据库Schema中所有的对象,包括表结构,视图,存储过程等,clean操作在dev 和
    test阶段很好用,但在生产环境务必禁用

  4. info
    Info用于打印所有Migrations的详细和状态信息,其实也是通过Metadata表和Migrations完成的,Info能够帮助快速定位当前的数据库版本,以及查看执行成功和失败的Migrations。下图很好地示意了Info打印出来的信息

  5. repair repair操作能够修复Metadata表,该操作在Metadata表出现错误时是非常有用的

  6. validate Validate是指验证已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。
    Validate原理是对比Metadata表与本地Migrations的Checksum值,如果值相同则验证通过,否则验证失败,从而可以防止对已经Apply到数据库的本地Migrations的无意修改

  7. undo
    撤销操作,社区版不支持

在这里插入图片描述

官方文档

请参考官方文案: https://documentation.red-gate.com/home

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值