Spring Boot 3.0 : 集成flyway数据库版本控制工具

目录

  • Spring Boot 3.0 : 集成flyway数据库版本控制工具
    • flyway是什么
    • 为什么使用flyway
      • 主要特性
      • 支持的数据库:
    • flyway如何使用
    • spring boot 集成实现
      • 引入依赖
      • 配置
      • sql版本控制约定
        • 3种版本类型
      • 运行Spring
        • Flyway 8.2.1及以后版本不再支持MySQL?

个人主页: 【⭐️个人主页】
需要您的【💖 点赞+关注】支持 💯


在这里插入图片描述

Spring Boot 3.0 : 集成flyway数据库版本控制工具

📖 本文核心知识点:

  • flyway是什么
  • 为什么使用flyway
  • flyway如何使用
  • spring boot 集成实现

flyway是什么

https://flywaydb.org/

我们都知道,Git/ SVN 是代码界的版本控制工具,那么,Flyway 就是一款数据库界的版本控制工具,它可以记录数据库的变化记录。

Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。

为什么使用flyway

主要特性

  • 普通 SQL:纯 SQL 脚本(包括占位符替换)没有专有的XML格式,没有锁定
  • 无限制:使用 Java 代码来进行一些高级数据操作
  • 零依赖:只需运行在 Java6(及以上)和数据库所需的 JDBC 驱动
  • 约定优于配置:迁移时,自动查找系统文件和类路径中的 SQL 文件或 Java 类
  • 高可靠性:在集群环境下进行数据库升级是安全可靠的
  • 云支持:完全支持 Microsoft SQL Azure, Google Cloud SQL & App Engine、Heroku Postgres 和 Amazon RDS
  • 自动迁移:使用 Flyway 提供的 API,让应用启动和迁移同时工作
  • 快速失败:损坏的数据库或失败的迁移可以防止应用程序启动
  • 数据库清理:在一个数据库中删除所有的表、视图、触发器,而不是删除数据库本身

可能很多公司都是通过人工去维护、同步数据库脚本,但经常会遇到疏忽而遗漏的情况,举个简单的例子:

我们在开发环境对某个表新增了一个字段,而提交测试时却忘了提交该 SQL 脚本,导致出现 bug 而测试中断,从而影响开发、测试的工作效率。

有了 Flyway,我们可以按版本约定,统一管理所有的 SQL 脚本变更,在所有环境自动同步数据库,而无需人为手工控制,再也不用担心因数据库不同步而导致的各种环境问题

支持的数据库:

在这里插入图片描述

flyway如何使用

在这里插入图片描述
支持的 7 个命令:

  • Migrate(迁移)
  • Clean(清理所有配置的对象)
  • Info(显示迁移状态和细节)
  • Validate(验证迁移规则)
  • Undo(撤消最近的迁移)
  • Baseline(建立基线)
  • Repair(修复迁移历史表)

spring boot 集成实现

工具版本
spring boot3.1.5
flyway10.0.1
jdk17
mysql8+

Flyway 几乎是零依赖,最低的要求是:

JDK 1.7+
Jdbc Driver

引入依赖

   implementation 'org.flywaydb:flyway-core:10.0.1'
   <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>10.0.1</version></dependency>

配置

Spring Boot 默认提供了对 Flyway 的自动配置:

org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration

在这里插入图片描述
application.yaml配置

spring:flyway:enabled: true# 禁止清理数据库表clean-disabled: true# 如果数据库不是空表,需要设置成 true,否则启动报错baseline-on-migrate: true# 与 baseline-on-migrate: true 搭配使用baseline-version: 0locations: - classpath:db/migration/mysql #(根据个人情况设置)

将需数据迁移的 sql 文件放置到 db/migration/mysql 目录中,启动 Spring Boot 项目即可运行 Flyway 进行数据迁移。

注意事项:

如果 flyway 不是项目初期引入,而是在数据库已有表的情况下引入时必须设置 baseline-on-migrate: true,设置该配置启动项目后,flyway 就会在数据库中创建flyway_schema_history表,并且会往该表中插入一条 version = 1 的建表记录,如果迁移数据有 V1__ 开头的文件,扫描文件会忽略该文件不执行迁移,进而可能引发其他迁移数据出错的问题。

sql版本控制约定

Flyway不限定脚本里面的内容,但是对脚本文件的名称有一定的要求,基于约定由于配置的原则,不同的类型通过文件命名方式进行区分

3种版本类型
  1. 版本迁移(Versioned Migrations)以V开头,只会执行一次;
  2. 回退迁移(Undo Migrations)以U开头,执行一旦发生破坏性更改,就会很麻烦,项目中一般不用;可重复执行迁移(Repeatable Migrations)以R开头,每次修改后都会重新执行。
  3. 可重复运行的SQL,则以大写的“R”开头,后面再以两个下划线分割,其后跟文件名称,最后以.sql结尾。比如,RaddTable.sql,Rupdate_user.sql。

版本号需要唯一,否则Flyway执行会报错;如果V__脚本.sql,已经执行过了,不能修改里面的内容,再次执行Flyway就会报错。R——脚本.sql,如有变化可以执行多次。
V开头的SQL执行优先级要比R开头的SQL优先级高。

在这里插入图片描述

运行Spring

Flyway 8.2.1及以后版本不再支持MySQL?

在这里插入图片描述

官方Flyway 8.2.1版本发布说明(https://flywaydb.org/documentation/learnmore/releaseNotes#8.2.1),如下图所示
在这里插入图片描述

从说明上可知,MySQL代码被提取出来作为插件,需要另外增加依赖,根据官方文档(https://flywaydb.org/documentation/database/mysql)的说明,解决方案如下:

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-mysql</artifactId>
</dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256593.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5组10个共50个音频可视化效果PR音乐视频制作模板

我们常常看到的图形跟着音乐跳动&#xff0c;非常有节奏感&#xff0c;那这个是怎么做到的呢&#xff1f;5组10个共50个音频可视化效果PR音乐视频制作模板满足你的制作需求。 PR音乐模板|10个音频可视化视频制作模板05 https://prmuban.com/36704.html 10个音频可视化视频制作…

Google Bard vs. ChatGPT 4.0:文献检索、文献推荐功能对比

在这篇博客中&#xff0c;我们将探讨和比较四个不同的人工智能模型——ChatGPT 3.5、ChatGPT 4.0、ChatGPT 4.0插件和Google Bard。我们将通过三个问题的测试结果来评估它们在处理特定任务时的效能和响应速度。 导航 问题 1: 统计自Vehicle Routing Problem (VRP)第一篇文章发…

人工智能-异步计算

异步计算 今天的计算机是高度并行的系统&#xff0c;由多个CPU核、多个GPU、多个处理单元组成。通常每个CPU核有多个线程&#xff0c;每个设备通常有多个GPU&#xff0c;每个GPU有多个处理单元。总之&#xff0c;我们可以同时处理许多不同的事情&#xff0c;并且通常是在不同的…

【K8S】Hello World

文章目录 1 搭建本地测试环境1.1 安装 docker和 Colima1.2 安装 minikube1.3 启动minikube1.4 安装 kubectl1.5 注册 docker hub镜像仓库 2 k8s核心资源概念2.1 Pod2.2 Deployment2.3 Service2.4 Ingress 参考资料 1 搭建本地测试环境 本文以 mac os为例 1.1 安装 docker和 C…

开放式黑白灰,现代风餐厨装修案例分享。福州中宅装饰,福州装修

你是否曾经遇到过这些问题&#xff1a;餐厅和厨房的装修风格不统一&#xff0c;导致整体效果不协调&#xff1b;收纳空间不足&#xff0c;导致物品杂乱无章&#xff1b;光线不足&#xff0c;导致烹饪时看不清楚食材等等。这些问题让你的生活变得不方便&#xff0c;甚至影响你的…

配置应用程序监听器[org.springframework.web.context.ContextLoaderListener]错误

首先查看自己的配置文件(我maven项目) web.xml(内容除了文件的配置位置外&#xff0c;是否有其他的不同) <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3…

(十五)Flask覆写wsgi_app函数实现自定义中间件

中间件 一、剖析&#xff1a; 在前面讲session部分提到过&#xff1a;请求一进来&#xff0c;Flask会自动调用应用程序对象【Flask(__name__)】的__call__方法&#xff0c;这个方法负责处理请求并返回响应&#xff08;其实如下图&#xff1a;其内部就是wsgi_app方法&#xff…

python 数据分析

数据分析 数据分析是指用适当的方法对收集的数据进行分析,提取有用信息并且形成结论. 广义的数据分析包括狭义的数据分析和数据挖掘.狭义的数据分析是指根据目的,采用对比分析,分组分析,交叉分析,回归分析等分析方法,对数据进行分析和处理,得到特征统计量的过程.数据挖掘是指…

异想天开 | 如何实现PXE可视化?批量主机PXE如何监控状态?

这个问题源于早几年前印象比较深刻的面试&#xff0c;面的岗位是UCloud的CDN运维交付岗&#xff0c;当时面试官问我&#xff0c;在批量PXE的时候怎么才能快速确认是否已经PXE成功了&#xff1f;我当时的回答是可以看dhcp服务器分配的地址数量来确定。我已经忘记了为什么我会说出…

/proc/sys/net/ipv4/ 下网络参数的理解

/proc/sys/net/ipv4/下文件详细解释&#xff1a; /proc/sys/net/ipv4/下文件 /proc/sys/net/ipv4/ip_forward 该文件表示是否打开IP转发。 0&#xff0c;禁止 1&#xff0c;转发 基本用途&#xff1a;如VPN、路由产品的利用&#xff1b; 出于安全考虑&#xff0c;Linux系…

postcss-pxtorem实现页面自适应的原理

先声明一点这玩意本身不能实现哈&#xff0c;他只是一个工具&#xff0c;更是一个postcss的插件 帮助我们从px转化成为rem比如我们的代码 div {height: 100px;width: 100px; }经过这个插件转化之后变成 假设变成下面这样哈 div {height: 1rem;width: 1rem; }其他没啥子太大作…

灯塔资产管理系统魔改版搭建(ARL-Puls)

免责声明 文章仅做经验分享用途&#xff01;利用本文章所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&#xff01;&#xff01;&#xff01; 简介 ARL-Puls是基于斗…