欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Spring Boot中使用Flyway进行数据库迁移

Spring Boot中使用Flyway进行数据库迁移

2025/11/11 8:57:44 来源:https://blog.csdn.net/m0_64289188/article/details/145641940  浏览:    关键词:Spring Boot中使用Flyway进行数据库迁移

文章目录

    • 概要
    • Spring Boot 集成 Flyway
    • Flyway 其他用法
    • bug错误
      • Flyway版本不兼容
      • 数据库存在表了
      • Flyway 的校验和(Checksum)不匹配

概要

在 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: truelocations: classpath:db/migrationbaseline-on-migrate: trueplaceholder-replacement: falsedatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/my_info?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=falseusername: rootpassword: 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 会检测到校验和不匹配,从而抛出此错误。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词