【笔记整理】Flyway详细介绍,工作原理以及与Spring Boot的整合使用

Flyway

官方文档:https://flywaydb.org/documentation/

1.简介

1.1 Flyway是什么

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

就目前而言,我们部署应用的流程大概是这样的:

  • 开发人员将应用程序打包、按顺序汇总并整理数据库升级脚本
  • DBA拿到数据库升级脚本检查、备份、执行,以完成数据库升级
  • 应部署人员拿到应用部署包,备份、替换,以完成应用程序升级

引入Flyway之后的应用部署流程大概是这样的:

  • 开发人员将应用程序打包
  • 应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本)

它仅基于 7 个基本命令: Migrate、 Clean、 Info、 Validate、 Undo、 Baseline和 Repair。

迁移可以用SQL(支持特定于数据库的语法(例如 PL/SQL、T-SQL 等))或Java (用于高级数据转换或处理 LOB)编写。

1.2 为什么要迁移数据库

许多项目仍然依赖于手动应用的 sql 脚本。有时甚至不是(这里或那里的快速 sql 语句来解决问题)。很快就会出现很多问题:

  • 这台机器上的数据库处于什么状态?
  • 此脚本是否已应用?
  • 生产中的快速修复是否已应用于之后的测试中?
  • 你如何设置一个新的数据库实例?

数据库迁移是重新控制这种混乱局面的好方法。

它们允许您:

  • 从头开始重新创建数据库
  • 随时清楚数据库处于什么状态
  • 以确定性的方式从当前版本的数据库迁移到更新的版本

2.Flyway的工作原理

最简单的理解方式是:我们在一个空数据库上部署集成了Flyway的应用:

它将尝试定位其架构历史记录表。由于数据库是空的,Flyway 不会找到它,而是会 创建它。

  1. Flyway将在这数据库中创建一张表,用于记录migration的执行情况,表名称默认为:flyway_schema_histor

  2. 紧接着,Flyway将开始扫描文件系统或应用程序的类路径以进行迁移。它们可以用 Sql 或 Java 编写。然后根据版本号对迁移进行排序并按顺序应用:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fe1rLUbM-1656083393623)(F:\笔记\photo\flyway\2021-11-19_214017.jpg)]

  3. 最后将执行结果写入flyway_schema_histor并校验执行结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pG5elbnP-1656083393624)(F:\笔记\photo\flyway\2021-11-19_214059.jpg)]

  4. 下次版本迭代时,提供新的migration,会根据flyway_schema_histor的记录执行新migration

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UmB0res-1656083393625)(F:\笔记\photo\flyway\2021-11-19_214213.jpg)]

每次需要演化数据库时,无论是结构 (DDL) 还是参考数据 (DML),只需创建一个版本号高于当前版本号的新迁移。Flyway 下次启动时,它会找到它并相应地升级数据库。

3.Flyway与Springboot项目整合使用

3.1 导入依赖
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>5.2.1</version>
</dependency>

注意点:如果报下图所示的错误,是flyway与spring的版本冲突问题,解决方法将flyway降版本(可用5.2.1)

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:65)

The following method did not exist:org.flywaydb.core.Flyway.migrate()

The method’s class, org.flywaydb.core.Flyway, is available from the following locations:jar:file:/F:/Maven/LocalWarehouse/org/flywaydb/flyway-core/8.0.5/flyway-core-8.0.5.jar!/org/flywaydb/core/Flyway.class

It was loaded from the following location:file:/F:/Maven/LocalWarehouse/org/flywaydb/flyway-core/8.0.5/flyway-core-8.0.5.jar

Action:

Correct the classpath of your application so that it contains a single, compatible version of org.flywaydb.core.Flyway

3.2 添加配置
# 配置flyway
spring.flyway.baseline-on-migrate=true
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.flyway.table=flyway_schema_history
3.3 根据locations建包,创建SQL文件

注意点:SQL文件名必须符合规范

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frg6RCNL-1656083393625)(F:\笔记\photo\flyway\2021-11-20_160347.jpg)]

3.4 更新数据库,查看是否有变化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-chxl5KId-1656083393626)(F:\笔记\photo\flyway\2021-11-20_161154.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWCsweaK-1656083393626)(F:\笔记\photo\flyway\2021-11-20_161211.jpg)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值