SpringBoot后端开发常用工具详细介绍——flyway数据库版本控制工具

文章目录

    • 什么是flyway
      • 简介
      • 为什么要使用flyway
    • 流程介绍
    • 整合springboot
      • 添加pom文件
      • 配置flyway
      • 向resource/db/migration添加sql文件
    • 注意事项
      • 1. 迁移报错
      • 2. 迁移顺序
    • 参考

什么是flyway

简介

为什么要使用flyway

我们在开发时往往会有这样一种情况:

进行软件开发时,在开发环境修改数据库,完成功能开发。当我们要部署到生产环境上时,需要将生产环境上的数据库手动修改为和开发环境相同的结构。但是这样的过程是由开发人员手动修改。这样就会产生:忘记修改、修改结构与开发环境不一致等问题。

那么为了解决这样的问题,我们引入了flyway这样的数据库版本控制工具。

其作用与git类似,git是针对整个项目文件进行版本控制, 而flyway是对数据库进行版本控制。

流程介绍

1)Flyway在第一次执行时,会创建一个默认名为flyway_schema_history的历史记录表。这张表会用来跟踪或记录数据库的状态
2)每次项目启动时都会自动扫描脚本目录 classpath:db/migration下的脚本文件,通过查询flyway_schema_history来判断是否为新增文件,从而判断是否进行迁移
3)如果历史记录表不存在,则新建历史记录表;
4)如果是一次性执行脚本(V),按版本号从小到大执行迁移脚本,与当前历史表中的版本号做对比,大于当前版本号的脚本才会被执行迁移;
5)如果是可重复执行脚本(R),检查脚本是否有变动,有变动的可重复脚本才会被执行迁移,R的命名不带版本号

flyway_schema_history结构如下:在这里插入图片描述在这里插入图片描述

整合springboot

添加pom文件

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

配置flyway

  flyway:# 是否启用enabled: true# 编码格式encoding: UTF-8# 迁移sql脚本文件存放路径,映射到resource/db/migrationlocations: classpath:db/migration# 迁移sql脚本文件名称的前缀,默认Vsql-migration-prefix: V# 迁移sql脚本文件名称的分隔符,默认2个下划线__sql-migration-separator: __# 迁移sql脚本文件名称的后缀,默认sqlsql-migration-suffixes: .sql# 迁移时是否进行校验,默认truevalidate-on-migrate: true# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表baseline-on-migrate: true

向resource/db/migration添加sql文件

命名规则按照配置文件中设定的

例如V1.0.0__init_database.sql,注意第一个V1.0.0后面的下划线为两个下划线

注意事项

注意以下事项,否则均会出现报错:

  1. 已经执行过的迁移文件(V)不能修改。

  2. 版本号不能相同

  3. 删除已经执行过的迁移

1. 迁移报错

删除flyway_schema_history中的脚本执行记录,否则就会报错

2. 迁移顺序

以V为前缀的单次迁移文件先进行执行,接着执行以R为前缀的迁移文件

在这个过程中均按照版本号大小从小往大执行

任意版本出现错误,之后的文件均不执行

参考

Flyway详解(使用说明及避坑指南、一文搞懂flyway)-CSDN博客

数据库版本管理框架-Flyway(从入门到精通)_wx665832b7aafe8的技术博客_51CTO博客

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

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

相关文章

HCIP-HarmonyOS Application Developer V1.0 笔记(一)

HarmonyOS的系统特性 硬件互助&#xff0c;资源共享;一次开发&#xff0c;多端部署;统一OS&#xff0c;弹性部署。 分布式软总线&#xff1a;分布式任务调度、分布式数据管理、分布式硬件虚拟化的基座 18N的独立设备 1个手机&#xff0c;8种设备&#xff08;车机&#xff0c…

深入解析HTTP与HTTPS的区别及实现原理

文章目录 引言HTTP协议基础HTTP响应 HTTPS协议SSL/TLS协议 总结参考资料 引言 HTTP&#xff08;HyperText Transfer Protocol&#xff09;超文本传输协议是用于从Web服务器传输超文本到本地浏览器的主要协议。随着网络安全意识的提高&#xff0c;HTTPS&#xff08;HTTP Secure…

stm32使用SIM900A模块实现MQTT对接远程服务器

SIM900A模块是一种GSM/GPRS无线通信模块,它可以通过SIM卡连接移动通信网络,并通过串口或USB接口与微控制器或计算机进行通信。 SIM900A驱动代码如下: #include "stm32f10x.h" #include "stdio.h" #include "stdlib.h" #include "sim900a…

算法:LeetCode283_移动零_Java实现

package com.leetcode;import java.util.Arrays;/*** LeetCode283&#xff1a;移动零*/ public class LeetCode283 {public static void moveZeroes(int[] nums) {//1.remove nums中0int slowIndex0;for(int fastindex0;fastindex<nums.length;fastindex){if(nums[fastindex…

Docker搭建基于Nextcloud的个人云盘/私有云盘/个人相册/家庭NAS

安装配置Docker 官方安装文档&#xff1a;https://docs.docker.com/engine/install/ Docker常用命令&#xff1a;https://blog.csdn.net/qq_43003203/article/details/139532097?spm1001.2014.3001.5502 Docker镜像仓库配置方法和国内常用镜像仓库地址&#xff1a; 输入&a…

杂项笔记

这个好像如果如果分配空间就会执行 这个扩容好像会进行拷贝 4 没懂 X x 0; X x1 {0,0}; 都会调用X::X(int x1, int x2 0)

【VUE点击父组件按钮,跳转到子组件】

要实现在Vue中&#xff0c;父组件通过点击按钮进入子组件的 <el-dialog> 弹窗&#xff0c;并在弹窗中嵌套 <el-table> 表格&#xff0c;可以按照以下步骤进行编写代码&#xff1a; 在父组件中&#xff0c;定义一个数据属性用于控制子组件弹窗的显示与隐藏。 data…

HTTP介绍及请求过程

HTTP(HyperText Transfer Protocol),即超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。以下是关于 HTTP 的详细介绍: 一、基本概念 定义与作用: HTTP 是互联网上应用最为广泛的一种网络协议,它定义了客户端和服务器之间请求和响应的标准方式。…

Python从入门到高手7.3节-列表的常用操作方法

目录 7.3.1 列表常用操作方法 7.3.2 列表的添加 7.3.3 列表的查找 7.3.4 列表的修改 7.3.5 列表的删除 7.3.6 与列表有关的其它操作方法 7.3.7 与10月说再见 7.3.1 列表常用操作方法 列表类型是一种抽象数据类型&#xff0c;抽象数据类型定义了数据类型的操作方法。在本…

2024.10.29- Linux(CentOS7)笔记(1)

一、Linux文件系统的介绍 Linux的文件系统与Unix的文件系统类似&#xff0c;也是一个树形结构。 最基本的是根目录&#xff1a;/ 。相当于windows文件系统的盘符。 /&#xff1a; 根路径&#xff0c; 根路径下有以下文件夹 ​ /bin -> usr/bin : 存储的是用户级别的指令…

腾讯通低成本替代方案:支持银河麒麟及统信等国产系统和移动端

一、腾讯通继续使用的核心痛点 自腾讯通停更及官网下架后&#xff0c;用户获取更新、技术支持和资源下载的渠道被切断&#xff0c;面临以下无法解决的关键问题&#xff1a; ● 在国产系统及移动端无法使用&#xff1a;腾讯通仅兼容Windows与MAC系统&#xff0c;致使用户在国产…

vue路由的基本使用

vue路由的基本使用 vue-router简介一、路由配置和使用1、安装2、创建路由实例2、在组件中引用路由 router-view ,如APP根组件中直接引用&#xff1a;3、最后还需要把路由挂载到APP实例中&#xff0c;在main.js中注册路由&#xff1a; 二、路由重定向与别名三、声明式导航1、传统…

大模型低资源部署策略

文章目录 解码效率分析大模型训练后量化方法经验性分析与相关结论由于大模型的参数量巨大,在解码阶段需要占用大量的显存资源,因而在实际应用中的部署代价非常高。在本文中,我们将介绍一种常用的模型压缩方法,即模型量化(ModelQuantization),来减少大模型的显存占用,从…

Qt元对象系统 —— 信号与槽

信号与槽讨论的是Qt对象之间的连接与交互。我们就是使用这种方式实现了一个简单的异步调用。换而言之&#xff0c;信号与槽让我们可以不必考虑复杂的调用。只需要当我们需要在程序中表达&#xff1a;“希望在程序中通知一个事件而且按照我们设定的方式给出回应”的时候&#xf…

基于Springboot+微信小程序的“学课助手”小程序 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…

如何将原本打开Edge呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面

每次打开Edge浏览器&#xff0c;都会呈现出360浏览器的页面&#xff0c;很烦。以下将说明如果将呈现出的360浏览器&#xff0c;更换成原本的Edge页面或者百度等其他页面。 1.找到你的控制面板&#xff0c;点击卸载程序。 2. 找到360安全卫士&#xff0c;右键单击更改/卸载。 3…

Vscode中Github Copilot无法使用

现象 Copilot侧边栏显示要登录&#xff0c;但是点击"github登录"没有反应与Copilot对话&#xff0c;报错如下&#xff1a; Unexpected token o, "[object Rea"... is not valid JSON解决方案 在网上怎么找都没找到类似的问题&#xff0c;最后发现是Vsco…

MAC电脑的ifconfig输出

在Mac电脑上执行ifconfig后&#xff0c;输出如下&#xff0c;每个人的电脑会有差异 lo0: flags8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384options1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>inet 127.0.0.1 netmask 0xff000000inet6 ::1 prefixlen 128inet6 …

云原生笔记

#1024程序员节|征文# 单页应用(Single-Page Application&#xff0c;SPA) 云原生基础 云原生全景内容宽泛&#xff0c;以至于刚开始就极具挑战性。 云原生应用是高度分布式系统&#xff0c;它们存在于云中&#xff0c;并且能够对变化保持韧性。系统是由多个服务组成的&#…

Android 下载进度条HorizontalProgressView 基础版

一个最基础的自定义View 水平横向进度条&#xff0c;只有圆角、下载进度控制&#xff1b;可二次定制度高&#xff1b; 核心代码&#xff1a; Overrideprotected void onDraw(NonNull Canvas canvas) {super.onDraw(canvas);int mW getMeasuredWidth();int mH getMeasuredHei…