flyway

article/2024/12/26 9:58:06

需求:

目前环境太多套,而且每套的代码版本都是不一致的,再分支升级版本的时候每次都需要处理数据库的sql脚本,用人工核对容易出错或遗漏,为避免sql脚本混乱,需要统一的数据版本工具来进行维护。当前公司生产使用sql审核平台,除了生产环境的以外,各公司机房之间的版本希望通过数据版本控制。

方案:使用Flyway数据版本控制

方案介绍:

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

官方网站:https://flywaydb.org/

首先先了解下数据版本说明:

FlywaySQL 文件分为 VersionedRepeatableUndo 三种:

  • Versioned 用于版本升级, 每个版本有唯一的版本号并只能执行一次.
  • Repeatable 可重复执行, 当 Flyway检测到 Repeatable 类型的 SQL 脚本的 checksum 有变动, Flyway 就会重新应用该脚本. 它并不用于版本更新, 这类的 migration 总是在 Versioned 执行之后才被执行。
  • Undo 用于撤销具有相同版本的版本化迁移带来的影响。但是该回滚过于粗暴,过于机械化,一般不推荐使用。一般建议使用 Versioned 模式来解决。

这三种的命名规则如下图:

naming.png

  • Prefix 可配置,前缀标识,默认值 V 表示 Versioned, R 表示 Repeatable, U 表示 Undo

  • Version 标识版本号, 由一个或多个数字构成, 数字之间的分隔符可用点 . 或下划线 _

  • Separator 可配置, 用于分隔版本标识与描述信息, 默认为两个下划线 __

  • Description 描述信息, 文字之间可以用下划线 _ 或空格 ``分隔

  • Suffix 可配置, 后续标识, 默认为 .sql

    目前系统项目基本使用Versioned 就行,其他类型了解下就行。

项目集成

Flyway已经集成到spring的actuate中因此集成非常方便

  • 第一步,在pom.xml中增加flyway的依赖:

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

    注意版本号之前

  • 第二步,application.yml文件中配置Flyway,定义SQL脚本的在项目的路径(更多参数参考:https://flywaydb.org/documentation/configuration/parameters/)

    flyway:table: schema_version				#Flyway表名locations: classpath:db,db/**  	#脚本路径enabled: true    # 因为生产使用sql审核平台,因此生产环境Flyway启用关闭(这点很重要)outOfOrder: true # 允许无序执行,会执行之前旧版本新加的sql  默认falseignoreMissingMigrations: true   #db记录但没脚本 默认falseignoreIgnoredMigrations: true   #有脚本db没记录 默认false
    
  • 第三步,按Flyway的规范创建版本化的SQL脚本

    • 在工程的src/main/resources目录下创建db目录
    • db目录下创建版本化的SQL脚本
    • 版本号规范 V版本号__姓名_日期_类型.sql 例如:V1.9.0.0__name_20210623_ddl.sql

公司的额外注意事项:

1、 因为公司的mysql是使用的开源分支mariaDB,因此url需要增加useMysqlMetadata=true参数才能使用Flyway

2、Sql脚本最好在上线前才提交到远程git,免得开发同伴频繁修改造成文件checksum比对不上

3、同一版本sql类型ddl跟dml最好分开,用小版本号区分就行


http://chatgpt.dhexx.cn/article/2oWlbP61.shtml

相关文章

springboot:集成flyway

文章目录 springboot&#xff1a;集成flyway一、简介二、Flyway工作流程三、配置文件使用Flyway添加相关配置创建脚本所在文件夹sql脚本命名规范启动测试 四、Flyway配置清单五、maven插件的使用migratebaselineclean&#xff08;慎用&#xff09;inforepairvalidateundo 六、f…

Firefly

Firefly(流萤): 中文对话式大语言模型在本文中&#xff0c;笔者将介绍关于Firefly&#xff08;流萤&#xff09;模型的工作&#xff0c;一个中文对话式大语言模型。https://mp.weixin.qq.com/s/TX7wj8IzD_EaMTvk0bjRtA一个支持中文的176B开源基础模型BLOOM&#xff1a;从数据源…

RIP 水平分割

水平分割 为了防止环路,RIP引入了水平分割机制,即从一个接口收到的路由更新,不会再从这个接口发出去,水平分割默认开启. 实验&#xff1a;RIP的水平分割 首先我们先查看R1和R3的路由表有什么异常

RIP水平分割实验

华为RIP水平分割实验 为了防止环路&#xff0c;BIP引入了水平分割机制&#xff0c;即从一个接口收到得路由更新&#xff0c;不会在从这个接口发出去&#xff0c;水平分割默认开启 实验拓补图如下 首先配置R1 system view [Huawei]sysname R1 [R1]int g0/0/0 [R1-Gigabi…

路由协议BGP之打破IBGP水平分割✍

为什么需要打破IBGP的水平分割&#xff1f; 因为IBGP水平分割&#xff0c;导致在一个AS内部若一台BGP路由器需要将通过其他AS学习到的路由传递给本地AS中的ibgp邻居时&#xff0c;需要和本地AS内部所有的BGP设备建立IBGP邻居关系&#xff1b;邻居关系数量成指数上升&#xff1…

解决IBGP的水平分割和BGP选路原则

解决IBGP的水平分割问题 IBGP水平分割&#xff1a;防止环路的产生 方法1&#xff1a;路由反射器(RR) 路由反射器可以反射所学习到的IBGP路由信息。 指定一台路由器称为 路由反射器&#xff08;RR&#xff09; 的时&#xff0c;必须在他的IBGP对等体关系中选择一个或者多个设备…

html中怎么接着水平线后面,html水平分割线怎么设置?html水平分割线的代码示例讲解...

在前端网页的开发中我们有时候需要用到水平分割线来分割不同的文档&#xff0c;会让整个网页看起来美观和整洁&#xff0c;也会凸显某一段文字的重要性&#xff0c;那么网页中水平分割线该如何实现呢&#xff1f; 本篇文章就给大家来分享一下html水平分割线的实现方法。 在html…

基于WPS的Word最佳实践系列(给标题添加水平分割线)

基于WPS的Word最佳实践系列&#xff08;给标题添加水平分割线&#xff09; 项目背景 在日常办公中&#xff0c;我们经常需要给标题添加一条水平分割线&#xff0c;将标题与正文内容分开&#xff0c;那么如何快速添加水平分割线呢&#xff1f; 项目实施 1. 添加水平分割线 …

5.2 BGP水平分割

5.2.2实验2&#xff1a;BGP水平分割 1. 实验目的 熟悉BGP水平分割的应用场景掌握BGP水平分割的配置方法 2. 实验拓扑 实验拓扑如图5-2所示&#xff1a; 图5-2&#xff1a;BGP水平分割 3. 实验步骤 &#xff08;1&#xff09;配置IP地址 R1的配置 <Huawei&g…

图像分割之水平集(Level Set)分割

几何活动轮廓模型——水平集分割&#xff1a;Active Contours Without Edges 水平集方法 水平集是跟踪轮廓和表面运动的一种数字化方法&#xff0c;它不直接对轮廓进行操作&#xff0c;而是将轮廓设置成一个高维函数的零水平集。这个高维函数叫做水平集函数。然后对该水平集函数…

BGP选路——本地优先级选路(+BGP路由水平分割机制)

目录 一、本地优先级特性 二、配置命令&#xff1a; 三、图解&#xff1a; 四、BGP路由水平分割机制 BGP路由13条选路顺序&#xff1a; 权重——本地优先级——本地始发——最短AS-PATH——起源属性——MED属性——EBGP路由优于IBGP——八——九——十——十一——十二——…

html文字段落分割,HTML设置水平分割线_html/css_WEB-ITnose

在Web中使用水平分割线可以分割不同的文字段落或者其它网页组件&#xff0c;轻松地修饰了段落排版&#xff0c;使之更美观。当然&#xff0c;水平分割线还可以更加明显地突出某一段重要的文字&#xff0c;使之更加醒目。 使用标签可以轻松地设置一条水平线。方法如下&#xff1…

初步了解BGP-2【update-source、水平分割、同步概念】

初步了解BGP-2【update-source、水平分割、同步概念】 目录 初步了解BGP-2【update-source、水平分割、同步概念】Update-sourceIBGP 水平分割IBGP与IGP的同步 Update-source 由于BGP无法像IGP那样自动发现邻居&#xff0c;而BGP的邻居需要手动指定邻居&#xff0c;一般情况下…

html分割线颜色怎么在css中写,html水平分割线 html 分割线颜色怎么变浅

深入理解es6和es6标准入门哪本好 Dubbo的分布式系统架构实战需要哪些步骤完成 HTML如何添加水平分割线: HTML提供了修饰段落的水平分割线&#xff0c;在很多的网页布局中都可以轻松使用&#xff0c;而不需要另外作图。水平分割线的标签是单标签&#xff1a; 默认情况下只占一行…

水平集分割

基于距离正则的水平集分割MATLAB代码&#xff0c;无需初始化 % This Matlab code demonstrates an edge-based active contour model as an application of % the Distance Regularized Level Set Evolution (DRLSE) formulation in the following paper: % % C. Li, C. X…

图像分割 - 水平集算法

水平集介绍 水平集分为三种&#xff1a; 1 . 基于图像边缘灰度梯度信息 &#xff0c;适用于边缘强的图像分割 2 . 基于区域特征 &#xff0c;利用区域信息引导曲线慢慢靠近 &#xff0c;比如分割曲线区域的内外灰度均值&#xff0c;分割曲线内部区域面积&#xff08;例如 Ch…

IBGP水平分割

IBGP水平分割规则 IBGP水平分割用于在IBGP对等体之间进行路由传递时&#xff0c;无法像EBGP对等体那样一来AS-Path属性进行防止环路的问题&#xff0c;因为AS-Path属性在AS内进行传递时是不会发生改变的。 下图便是极有可能出现IBGP对等体环路的场景&#xff1a; R1将10.1.1.…

垂直分割和水平分割

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;水平分割&#xff1a; 例&#xff1a;QQ的登录表。假设QQ的用户有100亿&#xff0c;如果只有一张表&#xff0c;每个用户登录的时候数据库都要从这100亿中查找&#xff0c;会很慢很慢。如果将这一张表分成1…

RIP的水平分割及触发更新(超详细,小白基础实验)

RIP的水平分割及触发更新 希望有需要的小伙伴可以参考参考&#xff0c;写的不好&#xff0c;请多包涵&#xff01; 基本概念&#xff1a; 1&#xff1a;水平分割&#xff08;Split Horizon&#xff09;指的是RIP从某个接口接收到的路由信息&#xff0c;不会从该接口再发给邻居…

分库分表的垂直分割与水平分割

1、垂直分库 根据业务耦合性&#xff0c;将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似&#xff0c;按业务分类进行独立划分。与“微服务治理”的做法相似&#xff0c;每个微服务使用单独的一个系统。如图&#xff1a; 2、垂直分表 基于数据表中的…