【笔记整理】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 编写。然后根据版本号对迁移进行排序并按顺序应用:

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

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

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

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

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

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

3.Flyway与Springboot项目整合使用

3.1 导入依赖

<dependency>
    <groupId>org.flywaydbgroupId>
    <artifactId>flyway-coreartifactId>
    <version>5.2.1version>
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文件名必须符合规范

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

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

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

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

你可能感兴趣的:(数据库,spring,boot,java,数据库)