35.从零开始学springboot-数据库版本管理Flyway

springboot 3整合flyway数据库版本管理 其中,Versioned用于版本升级,每个版本有唯一的版本号并只能执行一次;Repeatable可重复执行,当Flyway检测到Repeatable类型的SQL脚本的checksum有变动,Flyway就会重新应用该脚本;一般不推荐使用,因为版本一但需要回退,可能有破坏性的操作已经执行,我们需要经过充分测试的备份和有一些还原数据的策略。但和上面的insert.sql不一样的地方在于,我们可以重复修改该sql文件内容以达到我们期望的效果。迁移指的是把数据库结构从一个版本更新到另一个版本。 阅读详情

前言

一个项目上线后,在不断的迭代过程中,总会出于这样那样的原因需要对数据库表做“增删改”这些“硬”操作.

事实上,在项目真正稳定运行前,对数据库的调整根本不可能停止.

那么,每次发版前,收集每个开发人员调整的SQL文件就慢慢的变成一件麻烦的事,大概会有如下痛点:

  • 开发人员往往会遗忘SQL更改
  • 每个人的SQL会有“先后”执行的顺序问题
  • 需要手动去数据库执行

那么,有没有这么一套“工具”可以让执行SQL变更脚本变得更加自动,智能呢?

本章,我们介绍数据库版本管理工具Flyway工具

Flyway简介

Flyway是独立于数据库的应用、管理并跟踪数据库变更的数
据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不
同人的代码那样,管理不同人的sql脚本,从而做到数据库同
步

Flyway流程

  • 首先配置好flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储flyway的运行信息,默认的数据库名:flyway_schema_history

  • 紧接着Flyway将开始扫描文件系统或应用程序的类路径进行迁移。然后,Flyway的数据迁移将基于对用sql脚本的版本号进行排序,并按顺序应用:

可以看到执行数据库表后在checksum中储存一个数值,用于在之后运行过程中对比sql文件执行是否有变化。

注意:
flyway在执行脚本时,会在源数据表中检查checksum值,并确定上次运行到哪一个脚本文件,本次执行时从下一条脚本文件开始执行。所以编写脚本的时候不要去修改原有的脚本内容,并且新的脚本版本号要连续

接下来,我们使用Springboot集成Flyway

Springboot 集成Flyway

  • 老规矩,我们先创建一个Springboot项目(自行集成mybatis)
    然后在pom.xml加入如下依赖集成Flyway
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
        </dependency>
  • 然后我们在application.yml中写入mysql的配置及Flyway的配置(Flyway配置可不写,不写配置的话默认读取当前项目下的 “resources/db/migration”目录)
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  flyway:
    locations: classpath:db/migration/
  • 接下来,我们在resources/db/migration这个目录下创建我们需要执行的SQL脚本即可
    此处,注意,SQL脚本命名要按照规则:
    flyway.png
sql脚本的格式:V_版本号__版本描述.sql  (中间是两个下划线)
形如:
V1_1__init.sql        对应的版本号就是1.1
V1_2__update       对应的版本号就是1.2

image.png

运行

运行,我们就会发现数据库会多出三张表
image.png

book和books是我们写的脚本创建的两张表,而flyway_schema_history此表为Flyway用来记录版本信息的默认表
image.png

附录-Flyway其它配置

flyway.baseline-description对执行迁移时基准版本的描述.
flyway.baseline-on-migrate当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error当发现校验错误时是否自动调用clean,默认false.
flyway.enabled是否开启flywary,默认true.
flyway.encoding设置迁移时的编码,默认UTF-8.
flyway.ignore-failed-future-migration当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls当初始化好连接时要执行的SQL.
flyway.locations迁移脚本的位置,默认db/migration.
flyway.out-of-order是否允许无序的迁移,默认false.
flyway.password目标数据库的密码.
flyway.placeholder-prefix设置每个placeholder的前缀,默认${.
flyway.placeholder-replacementplaceholders是否要被替换,默认true.
flyway.placeholder-suffix设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name]设置placeholder的value
flyway.schemas设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix迁移文件的前缀,默认为V.
flyway.sql-migration-separator迁移脚本的文件名分隔符,默认__
flyway.sql-migration-suffix迁移脚本的后缀,默认为.sql
flyway.tableflyway使用的元数据表名,默认为schema_version
flyway.target迁移时使用的目标版本,默认为latest version
flyway.url迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user迁移数据库的用户名
flyway.validate-on-migrate迁移时是否校验,默认为true.

请关注我的订阅号

订阅号.png

SpringBoot与SQLite无缝整合实战指南 本文详细介绍了SpringBoot与SQLite无缝整合的实战指南,涵盖环境配置、依赖管理、数据库操作及高级特性优化。通过具体案例演示如何快速开发小型应用,特别适合移动端、嵌入式设备及快速原型验证场景,显著提升开发效率。 阅读详情

相关推荐

SpringBoot+Vue教研信息管理系统设计与实践

动态表单引擎与状态机流程控制是现代Web应用开发的核心技术。通过JSON Schema实现前后端分离的表单配置,配合Vue递归组件渲染,可灵活适配多变的业务需求。SpringBoot与MyBatis-Plus的组合提供了稳定的数据持久层支持,结合Redis状态管理,能有效构建高可用的审核工作流系统。这类技术方案特别适用于教育信息化场景,如教研信息管理系统的动态表单版本控制、多级审核流程等需求。实际部署中采用MinIO分布式文件存储和Nginx反向代理等方案,可解决大文件存储和跨域访问等工程难题。

weixin_31412781的博客 314

Spring boot 集成数据库版本管理工具-flyway

步骤: 1:在pom文件中添加Flyway的maven依赖 org.flywaydb flyway-core 4.1.2 2:在resource目录下创建数据库sql集合文件夹,Flyway默认该文件夹名字为:db/migration 3:在application.yml文件中配置Flyway: #flyway flyway: baseline-on-migrate: true locatio...

u013267238的博客 819

置顶必读(1) |《滚雪球学 Spring Boot 4.x》专栏目录导航篇(持续更新中)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 8万+

springboot 项目自定义配置项数据库维护的实现

SpringBoot是一个基于Spring框架的快速开发应用程序的工具,它简化了Spring应用程序的创建和开发过程,使开发人员能够更快速地创建独立的、生产就绪的Spring应用程序。springboot 采用了约定大于配置的思路,同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用,大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

爱码少年 00fly.online 的博客 2万+

SpringBoot+Vue智慧菜园管理系统开发实战:从数据库到部署

在信息化和农业现代化加速推进的背景下,管理系统的开发模式正不断演进。前后端分离作为现代Web应用的主流架构,通过RESTful API实现数据交互与界面展示的解耦,既提升了开发效率,也增强了系统的可扩展性。SpringBoot以其自动配置和快速部署能力,成为构建稳定后端服务的优选框架,而Vue配合组件化生态则可高效打造用户友好的管理界面。同时,合理的数据库设计、JWT令牌鉴权以及定时任务调度,是保障系统数据一致性、安全性和自动化的关键原理。这类技术方案在智慧农业、物联网监测、企业资源管理等领域具有广泛的应用

weixin_34195364的博客 326

牙科预约系统设计:SpringBoot+Vue定制化实践

牙科预约系统是一种面向口腔医疗场景的专业化预约管理解决方案,其核心在于处理强业务约束下的时间调度、资源协同与规则校验。不同于通用SaaS工具,它需深度建模医生专长、设备依赖、治疗流程等实体关系,并通过可扩展的规则引擎实现动态业务逻辑。技术上强调前后端分离架构下的一致性保障、高精度时段校验与轻量级微服务适配,兼顾性能、安全与运维可行性。典型应用场景包括连锁牙科诊所的多分店排班、儿童/成人分诊、CBCT设备预约联动及医保结算对接。本文围绕SpringBoot后端与Vue前端协同落地的实战细节展开,涵盖四层时间校

weixin_32247165的博客 317

十二、Spring Boot集成的运维管理工具

(一)添加依赖 &lt;!--运维管理工具依赖--&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-actuator&lt;/artif...

panchang199266的博客 1332

SpringBoot项目集成Flyway进行数据库版本控制的详细教程

主要介绍了SpringBoot项目集成Flyway进行数据库版本控制,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

SpringBoot应用常用的工具类

统一返回结果类、统一异常处理类、常用的配置类

qq_35669498的博客 2379

保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil)

本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。

weixin_30236595的博客 455

自动驾驶开发者必看:如何用Impromptu VLA数据集提升模型在乡村道路的表现(附实战代码)

本文为自动驾驶开发者提供了利用Impromptu VLA开源数据集提升模型在乡村道路等极端场景表现的实战指南。该数据集专门针对边界模糊道路、非常规障碍物等非结构化环境,通过精选的8万多个极端场景片段,帮助模型弥补数据分布偏差。文章详细介绍了环境搭建、数据准备、模型微调及性能评估的全流程,并附有实战代码,旨在系统性提升自动驾驶系统在长尾场景下的鲁棒性。

t8u9v0w1x的博客 243

使用Spring Boot的数据库操作工具

1.背景介绍 数据库操作是现代软件系统中不可或缺的一部分。随着数据库技术的发展,许多高级数据库操作工具和框架已经出现,如Hibernate、MyBatis等。Spring Boot是一个用于构建Spring应用的优秀框架,它提供了许多便利的工具来简化数据库操作。在本文中,我们将深入探讨Spring Boot的数据库操作工具,揭示其核心概念、算法原理以及具体操作步骤。 2.核心概念与联系 Sp...

AI天才研究院 1292

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型

本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。

weixin_29045001的博客 327

SpringBoot引入Flyway,及Flyway简单了解

Flyway 中的常用概念 Flyway 中的概念可查阅 官方文档,这里挑选一些重要的进行简单介绍。 Schema History Table Flyway 对数据库进行版本控制的方式,是在指定数据库中创建一张表,即 Schema History Table(默认为 flyway_schema_history),记录由 Flyway 所执行的 sql 脚本状态。 Migration 在 Flyway 中,所有对数据库的变动,均称为 migration,migration 可以是 SQL 文件,也可以是 Ja

clearlxj的博客 3922

GD32F303定时器配置:实现两路互补PWM输出与相位控制

本文详细解析了基于GD32F303定时器实现两路互补PWM输出与精确相位控制的方法。通过配置TIMER2的中间对齐模式,结合REMAP功能解决引脚复用问题,从硬件层面稳定生成相位差180度的互补PWM信号,适用于电机驱动、开关电源等对时序要求苛刻的应用场景。

weixin_29182481的博客 303

Tiny windows 11 安装与部署

需要注意,安装完后键入 windows 键,输入 update 先更新系统。点击开始,等待完成即可,用户可自定义。

m0_73351035的博客 9045

SpringBoot集成Flyway进行数据库版本迁移管理

Flyway简介 Flyway中的迁移(migrations)模式 Flyway对数据库的所有更改都称为 migrations(迁移) 。 migrations(迁移) 分为版本控制(Versioned)迁移与可重复(Repeatable)的迁移两种, 而版本控制又分为regular(常规)和undo(撤销)两种形式。 版本控制迁移:具有版本号、描述和校验和,且版本是唯一的。描述用于简单记录迁移的内容,校验和用于检测意外更改。 版本控制迁移通常用于以下用途: 创建|更新|删除:表、索引、外键、枚举、UD

z28126308的专栏 819

手把手教你学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了四开关Buck-Boost(FSBB)变换器的Simulink仿真方法,重点解决模式切换时的直通风险和输出电压波动问题。通过统一电压PI控制、迟滞比较模式仲裁(Buck/Boost/Pass-Through)和200ns死区设计,实现了Vin从26V到22V变化时Vout稳定在12V±0.15V。关键步骤包括:搭建功率级电路、Stateflow模式判断、PI控制器输出占空比映射(Buck模式D≈Vo/Vin,Boost模式D≈1-Vo/Vin),以及带死区的PWM信号分配。仿真验证了切换过程中

MHD0815的博客 115

Spring整合Flyway使用笔记

引入依赖

yichengjie_c的博客 676

3、利用预训练卷积神经网络进行特征提取

本文介绍了如何使用预训练的卷积神经网络(如VGG16)进行图像特征提取,并将提取的特征存储在HDF5数据集中,以便后续用于机器学习模型的训练。文章详细阐述了特征提取的原理、HDF5数据格式的优势、HDF5DatasetWriter类的实现、特征提取流程的代码实现以及实际应用案例。通过该方法,可以在多种图像数据集上高效构建高精度的分类模型。

z2a3b4c5d的博客 112

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.csdn.net/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

Spring Boot 4.x 最佳实践仓库全解析:35+ 实战模块、源码级示例与升级迁移指南

> 本文以开源仓库 `spring-boot-best-practice` 的 [README.md](https://link.gitcode.com/i/8cc1371b65a950bcb40db751398931df) 为骨架,结合仓库内 35+ 个 Maven 多模块的实际源码与配置,系统梳理 Spring Boot 4.x 下从快速入门、数据访问、消息中间件到监控治理、容器部署的完整学习

gitblog_01131的博客 983

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

springboot2系列技术教程目录

springboot系列教程,参考网上现有的资料整理的。如果错误或者更好的相应内容可以留言。 每个主题都有相应的源码。源码地址 基于springboot2.1版本讲解 Springboot2(1)日志配置和动态日志等级设置 Springboot2(2)属性配置&amp;amp;amp;amp;amp;amp;amp;amp;自定义属性配置 Springboot2(3)静态资源处理 Springboot2(4)Controller控制层讲解 Spri...

cowbin2012的专栏 2万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SpringBoot+Vue校园社团管理系统设计与实现

现代Web开发中,前后端分离架构已成为主流技术方案,其中SpringBoot与Vue.js的组合因其高效协同特性被广泛应用。SpringBoot通过自动配置简化了传统SSM框架的复杂整合,而Vue的响应式数据绑定机制特别适合处理表单密集的管理系统场景。这种技术栈在校园信息化建设中具有显著优势,能够有效解决社团活动报名、成员管理、财务记录等痛点问题。以MySQL作为数据存储引擎,结合ACID事务特性,可确保关键业务数据的一致性。本文通过一个校园社团信息管理平台的具体实现,展示了如何运用SpringBoot的多

weixin_30546189的博客 342

SpringBoot 2 要升级吗

https://mp.weixin.qq.com/s?__biz=MzAwNjY3MjgzOA==&amp;mid=2477610530&amp;idx=1&amp;sn=25df6de6faaf52947885c8b0a87fa316&amp;chksm=8d502e8bba27a79d6e35d8ee6f80a9f0ecdf6ae0acfea29e9faadd758d0f57a66bb47ac...

乔志勇笔记 406

SpringBoot+Vue全栈鲜花电商系统设计与高并发优化

在电商系统开发中,高并发场景下的技术实现始终是核心挑战。通过分布式锁与缓存机制的结合,可以有效解决库存一致性问题,而消息队列的引入则实现了流量削峰。本文以鲜花电商为具体场景,详细解析了如何利用Redis+Lua脚本保障秒杀系统的数据一致性,结合RabbitMQ实现订单异步处理,最终达到5000+ QPS的并发处理能力。这些方案不仅适用于电商领域,也可为其他高并发系统提供参考。

weixin_34239169的博客 285
上一篇: 34.从零开始学springboot-mybatis查询字段null值不回显问题
下一篇: 36.从零开始学springboot-事务失效问题详解
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值