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

news/2025/2/22 11:48:34/

文章目录

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


http://www.ppmy.cn/news/1574147.html

相关文章

IPv6报头40字节具体怎么分配的?

目录 IPv6报头结构 字段详解 示例代码&#xff1a;IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比&#xff0c;IPv6不仅提供了更大的地址空间&#xff0c;还简化了报头结构&#xff0c;提高了网络设备的处理效率。…

【并发压测】高并发下Linux流量监控

在高并发环境下&#xff0c;Linux流量监控至关重要&#xff0c;可以帮助您确保网络性能和稳定性。以下是一些常用的Linux流量监控工具和方法&#xff1a; 1. **iftop**&#xff1a;iftop 是一款实时的网络流量监控工具&#xff0c;可以显示当前服务器上每个网络接口的流量使用情…

【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

TSMaster【第四篇:目击之术——总线测量窗口精解】

#### **——看破数据洪流的「天眼通」心法** --- ### **武侠场景导入&#xff1a;光明顶密道危机** > *光明顶密道中&#xff0c;张无忌身陷五行旗重围&#xff0c;需同时应对五路攻势。恰似工程师面对车载网络的多路总线数据洪流&#xff0c;唯有练就「天眼通」绝技&…

基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明

运行截图 功能介绍 前台功能包括&#xff1a;首页、详情页、订单、用户中心。后台功能包括&#xff1a;首页、轮播图管理、管理员、卖家管理、买家管理、景区管理、订单管理非开源功能&#xff08;分类管理&#xff0c;地区管理&#xff0c;收藏管理&#xff0c;评论管理&a…

人工智能任务23-天文领域的超亮超新星能源机制结合深度神经网络的研究方向

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务23-天文领域的超亮超新星能源机制结合深度神经网络的研究方向。 文章目录 一、研究背景阐述超亮超新星的定义与发现历程超亮超新星能源机制的主要理论模型1. 56Ni衰变模型2. 超新星抛射物与致密星周介…

前端导出word文件,并包含导出Echarts图表等

基础导出模板 const html <html><head><style>body {font-family: Times New Roman;}h1 {text-align: center;}table {border-collapse: collapse;width: 100%;color: #1118FF;font-weight: 600;}th,td {border: 1px solid black;padding: 8px;text-align: …

一周学会Flask3 Python Web开发-response响应格式

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在HTTP响应中&#xff0c;数据可以通过多种格式传输。大多数情况下&#xff0c;我们会使用HTML格式&#xff0c;这也是Flask中…