当前位置:首页 > 代码编程 > 正文

SpringBoot+Flyway进行数据表自动迁移和填充

代码编程 · Sep 05, 2024

前言

对于传统的应用,想必大家线上和开发的数据库表结构升级或数据迁移等操作都是手把手一条龙,或者使用 navicat 此类的工具进行结构同步。
但是对于多环境的应用,这样手把手去操作就比较麻烦了,而且还有可能会出错,如果我们使用数据库版本管理工具进行自动迁移和数据填充,就可以直接适配到 N 多个环境,再也不用去担心每个环境数据库结构的差异。
SpringBoot+Flyway 进行数据表自动迁移和填充

依赖

首先,我们需要先引入 Flyway 的依赖,大家也可以到这里去查找版本:https://mvnrepository.com/artifact/org.flywaydb/flyway-core

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

需要注意,如果你使用的数据库版本是 5.7,则不能使用最新的版本,版本 7.1.1 实测可以用于 5.7。

配置

我们需要在 application.yml 中开启自动迁移配置:

spring:flyway:baseline-on-migrate: trueclean-disabled: true

开启以上配置,会在数据库中自动创建名为 flyway_schema_history 的表,已记录迁移数据和状态。

表文件规则

默认 DDL 的 SQL 文件读取位置为 /resource/db/migration 下,你也可以使用 spring.flyway.locations 进行自定义设定;
然后我们在此目录下新增 DDL/DML 文件即可,不过有几点需要注意:

  1. 数据表以 Vx.x.x__ 开头,其中 x.x.x 代表版本号,你可以为 x.x 或者 x,这都是没问题的;比如V2.0.0 的新增用户表即为V2.0.0__create_user_ddl.sql

  2. 以 Rx.x.x__ 开头的文件会重复执行,如果你修改了此文件则会进行执行,无修改则不会执行。

  3. 以 Vx.x.x__ 开头的文件一旦执行成功,便不允许再进行任何修改,不然会出现启动异常。

  4. 版本号应该全局唯一的,不然会抛出异常提示有重复的版本,建议递增处理。

另外,如果是基础表结构可以直接名为V1.0.0__init.sql,这样就会在没有数据表的环境中执行创建并初始化表结构。

最后

至于什么时候要用到 Flyway 呢?个人认为在协同开发、有多环境、表结构迭代多的情况就使用此工具,避免手动迁移可能导致的遗漏等问题。