当前位置: 首页 > news >正文

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: 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 会检测到校验和不匹配,从而抛出此错误。

相关文章:

  • 云原生AI Agent应用安全防护方案最佳实践(下)
  • 安灯电子看板助力汽车零部件工厂实时监控与高效管理
  • 学习京东写测试用例
  • 上传解析 Excel 表(XLSX 文件)转为JSON数据
  • 【C/C++】位段
  • 【嵌入式】PCB电路板设计时,如何保证信号完整性?
  • LLaMA-Factory DeepSeek-R1 模型 微调基础教程
  • 基于javaweb的SpringBootoa办公自动化系统设计和实现(源码+文档+部署讲解)
  • 策略模式-小结
  • 硬盘检测利器CrystalDiskMark
  • SAP-ABAP:SAP屏幕数据的处理逻辑
  • Python 量化
  • 最新PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 ThinkPHP框架
  • linux redis ipv6、ipv4 只接收本地访问、接收本地和远程访问
  • spring6(完结)
  • 同.NET 8一起发布的C#12语法中新特性及用法演示
  • 基础算法 归并排序 #求逆序对
  • Python常见面试题的详解4
  • 【Day40 LeetCode】动态规划DP 回文子串问题
  • 如何在微信小程序中使用 Lottie 动画
  • 建设网站企业邮箱网站建设服务/软件公司
  • 国外做动运服装的网站/重庆网站推广软件
  • 上海 网站备案拍照/磁力搜索器下载
  • 长沙做网站a微联讯点很好/少女长尾关键词挖掘
  • 自己建设影视网站/除了91还有什么关键词
  • wordpress企业站教程/百度推广账户登录