SpringBoot中使用Flyway进行数据库迁移的详细流程

 更新时间:2025年02月17日 10:08:36   作者:一口酥Hac  
本文介绍了如何在Spring Boot项目中使用Flyway进行数据库迁移,Flyway通过SQL脚本管理数据库变更,支持自动执行和版本控制,避免了手动执行SQL脚本的错误和维护困难,需要的朋友可以参考下

概要

在 Spring Boot 项目开发中,数据库的变更不可避免。手动执行 SQL 脚本不仅容易出错,也难以维护数据库版本的一致性。Flyway 作为一款轻量级的数据库迁移工具,能够帮助我们优雅地解决这些问题。

Spring Boot 集成 Flyway

1、添加 Flyway 依赖

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

2、配置 Flyway

spring:
  flyway:
    enabled: true
    locations: classpath:db/migration
    baseline-on-migrate: true
    placeholder-replacement: false
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_info?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
    username: root
    password: iuowiebd

3、创建数据库迁移脚本

Flyway 使用 SQL 脚本来定义数据库的变更。脚本需要放在 src/main/resources/db/migration 目录下(默认路径),并且遵循特定的命名规则:V<版本号>__<描述>.sql

例如:V1__create_user_table.sql

CREATE TABLE user
(
    id    INT PRIMARY KEY AUTO_INCREMENT,
    name  VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

insert into user (name, email)
values ('user1', 'user1@qq.com');

4、启动应用
启动 Spring Boot 应用,Flyway 会自动执行 db/migration 目录下的迁移脚本,并将执行记录存储在 flyway_schema_history 表中。

控制台关于 flyway 的日志信息:

在这里插入图片描述

成功创建表:

在这里插入图片描述

Flyway 其他用法

1、 禁用 Flyway 自动迁移

在某些场景下,可能需要手动控制 Flyway 的迁移,可以禁用自动迁移:

spring:
  flyway:
    enabled: false

bug错误

Flyway版本不兼容

如果使用的 Flyway 版本与 Spring Boot 版本不兼容,可能会导致 Flyway 无法正常工作。

控制台不打印任何关于 flyway 的日志。

数据库存在表了

数据库存在表了,就不会执行 sql 了。

Flyway 只会执行比当前数据库版本号更高的迁移脚本。如果数据库的当前版本是 1,而你的迁移脚本的版本号也是 1 或者更低,Flyway 会认为这些脚本已经执行过,因此不会再次执行。

所以只需把 sql 脚本的版本改一下,V2__create_user_table.sql(升高版本)

Flyway 的校验和(Checksum)不匹配

我先启动项目,数据库迁移成功,然后我改动了sql文件,就报错:

在这里插入图片描述

如果本地迁移脚本的内容发生了更改(例如,修改了 SQL 脚本),Flyway 会检测到校验和不匹配,从而抛出此错误。

以上就是SpringBoot中使用Flyway进行数据库迁移的详细流程的详细内容,更多关于SpringBoot Flyway数据迁移的资料请关注脚本之家其它相关文章!

相关文章

  • JAVA 自定义线程池的最大线程数设置方法

    JAVA 自定义线程池的最大线程数设置方法

    这篇文章主要介绍了JAVA 自定义线程池的最大线程数设置方法,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • springboot3.X版本集成mybatis遇到的问题及解决

    springboot3.X版本集成mybatis遇到的问题及解决

    在将SpringBoot3.X版本与MyBatis集成时,直接参考基于SpringBoot2.X的配置方法会导致各种报错,尤其是无法注入mapper的bean问题,这主要是因为SpringBoot3.X版本需要搭配MyBatis3.0.3及以上版本才能正常工作,通过更新maven配置至MyBatis3.0.3版本,可以解决这一问题
    2024-09-09
  • Kotlin基础教程之控制流(顺序,分支,循环)

    Kotlin基础教程之控制流(顺序,分支,循环)

    这篇文章主要介绍了Kotlin基础教程之控制流的相关资料,需要的朋友可以参考下
    2017-05-05
  • 在SpringBoot项目中如何实现线程池的动态监控

    在SpringBoot项目中如何实现线程池的动态监控

    Spring Boot因其简便、高效的特点广受开发者喜爱,在复杂的业务场景下,如何确保Spring Boot应用的高性能和稳定性成为了一个关键问题,其中,线程池的管理策略直接影响到系统的吞吐量和资源利用效率,本文将重点探讨在Spring Boot项目中,如何实现线程池的动态监控
    2023-10-10
  • Java getParameter方法案例详解

    Java getParameter方法案例详解

    这篇文章主要介绍了Java getParameter方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Spring boot项目使用thymeleaf模板过程详解

    Spring boot项目使用thymeleaf模板过程详解

    这篇文章主要介绍了Spring boot项目使用thymeleaf模板过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java parseInt解释加方法示例

    Java parseInt解释加方法示例

    使用此方法得到的原始数据类型的一个特定的字符串。 parseXxx()是一个静态方法,可以有一个参数或两个
    2013-11-11
  • Java封装实现自适应的单位转换工具类

    Java封装实现自适应的单位转换工具类

    这篇文章主要为大家详细介绍了如何使用Java封装实现一个自适应的单位转换工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • 深入了解Spring控制反转IOC原理

    深入了解Spring控制反转IOC原理

    IOC-Inversion of Control,即控制反转。它不是什么技术,而是一种设计思想。这篇文章将为大家介绍一下Spring控制反转IOC的原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Seata AT模式启动过程图文示例详解

    Seata AT模式启动过程图文示例详解

    这篇文章主要为大家介绍了Seata AT模式启动过程图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论