数据库版本控制工具--flyway

一. 什么是Flyway

Flyway 是一款开源的数据库迁移工具。它采用简单直观的方式管理数据库变更,通过版本化的迁移脚本确保数据库结构的一致性和可重复性。无论是开发环境、测试环境还是生产环境,Flyway 都能确保数据库变更按照预期顺序执行,避免手动修改数据库带来的风险。

二. Flyway 原理简介

  1. 识别当前版本:通过flyway_schema_history表检查数据库当前版本。
  2. 比对迁移脚本:将文件系统或类路径中的迁移脚本与已执行的历史记录进行比对。
  3. 执行未应用的脚本:按照版本号顺序执行所有未应用的迁移脚本。
  4. 记录执行结果:将执行成功的脚本信息记录到flyway_schema_history表中。

三.Flyway应用场景

  1. 团队协作开发:确保团队成员使用一致的数据库结构。
  2. CI/CD 流水线:自动化数据库变更,实现环境一致性。
  3. 多环境部署:开发、测试、生产环境使用相同的变更脚本。
  4. 数据库重构:安全地执行大规模数据库重构。
  5. 开源项目维护:方便贡献者同步数据库结构。

四.Spring boot 集成Flyway

1. 添加依赖

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

2.flyway配置:

flyway:# 是否自动执行基准迁移,# 当 baseline-on-migrate 设为 false(这是默认值)时,Flyway 遇到未管理的数据库就会报错,不会自动进行基线操作。# 当 baseline-on-migrate 设为 true 时,如果 Flyway 发现数据库里没有 flyway_schema_history 表(也就是该数据库还没被 Flyway 管理过),它会先执行基线操作,再进行迁移。#基线操作会创建 flyway_schema_history 表,并且记录所有版本低于 baseline-version(默认是 1)的迁移脚本,将它们标记为已执行。baseline-on-migrate: true# baseline的版本号,默认为1.0baseline-version: 1.0# 是否开启flyway,默认true.enabled: true# 设置迁移时的编码,默认UTF-8.encoding: UTF-8# 当读取元数据表时是否忽略错误的迁移,默认false.ignore-failed-future-migration: false# 迁移脚本的位置,默认db/migration.locations: classpath:/flyway# 迁移时是否校验,默认为truevalidate-on-migrate: true# flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是 false 理论上作为默认配置是不科学的。clean-disabled: true# 验证错误时 是否自动清除数据库 高危操作!clean-on-validation-error: false#配置 Flyway 以允许非顺序迁移out-of-order: true

补充数据库相关的配置:

spring:datasource:dynamic:# 设置默认的数据源或者数据源组,默认值即为 masterprimary: masterdatasource:# 主库数据源master:type: your_connect_pooldriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/your_databaseusername: your_usernamepassword: your_password

3.取消集成Flyway

当flyway的依赖和配置是在公共配置里,如果某一个微服务不使用数据库,不需要集成Flyway,即可在该微服务的启动类中添加exclude

import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;@SpringBootApplication(exclude = FlywayAutoConfiguration.class)

4.添加SQL脚本

根据配置locations指定的位置创建sql脚本文件,如:V1__Create_User_Table.sql

注意,迁移脚本的名字必须遵循以下规则:必须是以V字母开头,然后放版本号(小数点有多少个不限制),然后是2个下划线(必须两个下划线),最后接上版本描述,必须以sql作为后缀名。

当微服务执行时,flyway会根据flyway_schema_history中记录的脚本执行情况,执行对应的SQL脚本。 

五.注意事项

1. 不允许对已经执行过的sql脚本文件进行修改,否则会报错。

2. sql脚本编写错误的时候微服务启动会报错。

3.当微服务启动出现报错时,flyway_schema_history已经有对应脚本的执行记录,需要删除flyway_schema_history表中的记录,或者修改sql脚本文件的版本号。

4.出现跳版本的情况,不允许再使用跳过的版本号,否则会报错。

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

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

相关文章

C++使用PoDoFo库处理PDF文件

&#x1f4da; PoDoFo 简介 PoDoFo 是一个用 C 编写的自由开源库&#xff0c;专用于 读取、写入和操作 PDF 文件。它适用于需要程序化处理 PDF 文件的应用程序&#xff0c;比如批量生成、修改、合并、提取元数据、绘图等。 &#x1f31f; 核心特点 特性说明&#x1f4c4; P…

论文分享➲ arXiv2025 | TTRL: Test-Time Reinforcement Learning

TTRL: Test-Time Reinforcement Learning TTRL&#xff1a;测试时强化学习 https://github.com/PRIME-RL/TTRL &#x1f4d6;导读&#xff1a;本篇博客有&#x1f9a5;精读版、&#x1f407;速读版及&#x1f914;思考三部分&#xff1b;精读版是全文的翻译&#xff0c;篇幅较…

dify插件接入fastmcp示例

文章目录 1. 使用python完成mcp服务1.1 准备环境&#xff08;python安装fastmcp&#xff09;1.2 mcp服务端示例代码1.3 启动mcp服务端 2. dify接入2.1 安装MCP SSE和 Agent 策略&#xff08;支持 MCP 工具&#xff09; 插件2.2 dify agent插件配置mcp:2.3 mcp服务配置&#xff…

Linux 挖矿木马排查命令清单

Linux 挖矿木马排查命令清单 1. 系统资源使用情况检查 # 查看CPU、内存使用情况 top -c# 检查CPU占用最高的进程 ps aux --sort-%cpu# 查找可疑进程名 ps -ef | grep -i miner\|cpu\|GPU\|xmr# 检查网络连接情况 lsof -i2. 可疑进程和隐藏进程检查 # 检查僵尸进程 ps -ef | …

PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式

一个简单的矩阵乘法例子来演示在 PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式。 这个例子会展示核心的区别在于如何获取和指定计算设备&#xff0c;以及&#xff08;对于 TPU&#xff09;可能需要额外的库和同步操作。 示例代码&#xff1a; import torch import tim…

自主shell命令行解释器

目标 能处理普通命令能处理内建命令 实现原理 用下面的时间轴来表示时间发生次序。时间从左向右。shell由标识为sh的方块&#xff0c;它随着时间从左向右移动。 shell从用户读入字符串“ls”。shell建立一个新的进程&#xff0c;然后等待进程中运行ls程序并等待进程结束。 …

如何在sheel中运行Spark

启动hdfs集群&#xff0c;打开hadoop100:9870&#xff0c;在wcinput目录下上传一个包含很多个单词的文本文件。 启动之后在spark-shell中写代码。 // 读取文件&#xff0c;得到RDD val rdd1 sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt") // 将单词进行切…

【入门】数字走向II

描述 输入整数N&#xff0c;输出相应方阵。 输入描述 一个整数N。&#xff08; 0 < n < 10 ) 输出描述 一个方阵&#xff0c;每个数字的场宽为3。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int in;i>1;i--){for(…

Python自动化-python基础(下)

六、带参数的装饰器 七、函数生成器 运行结果&#xff1a; 八、通过反射操作对象方法 1.添加和覆盖对象方法 2.删除对象方法 通过使用内建函数: delattr() # 删除 x.a() print("通过反射删除之后") delattr(x, "a") x.a()3 通过反射判断对象是否有指定…

重新定义高性能:Hyperlane —— Rust生态中的极速HTTP服务器

重新定义高性能&#xff1a;Hyperlane —— Rust生态中的极速HTTP服务器 &#x1f680; 为什么选择Hyperlane&#xff1f; 在追求极致性能的Web服务开发领域&#xff0c;Hyperlane 凭借其独特的Rust基因和架构设计&#xff0c;在最新基准测试中展现出令人惊艳的表现&#xff…

通俗的理解MFC消息机制

1. 消息是什么&#xff1f; 想象你家的门铃响了&#xff08;比如有人按门铃、敲门、或者有快递&#xff09;&#xff0c;这些都是“消息”。 在 MFC 中&#xff0c;消息就是系统或用户触发的各种事件&#xff0c;比如鼠标点击&#xff08;WM_LBUTTONDOWN&#xff09;、键盘输入…

腾讯开源SuperSonic:AI+BI如何重塑制造业数据分析?

目录 一、四款主流ChatBI产品 二、ChatBI应用案例与实际落地情况 三、SuperSonic底层原理 3.1、Headless BI 是什么 3.2、S2SQL 是什么 3.3、SuperSonic 平台架构 四、ChatBI应用细节深挖 五、与现有系统的集成方案 六、部署和安全 七、开源生态、可扩展性与二次开…

AI生成视频推荐

以下是一些好用的 AI 生成视频工具&#xff1a; 国内工具 可灵 &#xff1a;支持文本生成视频、图片生成视频&#xff0c;适用于广告、电影剪辑和短视频制作&#xff0c;能在 30 秒内生成 6 秒的高清视频&#xff08;1440p&#xff09;&#xff0c;目前处于免费测试阶段。 即…

OrangePi Zero 3学习笔记(Android篇)5 - usbutils编译(更新lsusb)

目录 1. Ubuntu中编译 2. AOSP编译 3. 去掉原来的配置 3. 打包 4. 验证lsusb 在Ubuntu中&#xff0c;lsusb的源代码源自usbutils。而OrangePi Zero 3中lsusb的位置可以看文件H618-Android12-Src/external/toybox/Android.bp&#xff0c; "toys/other/lsusb.c",…

bcm5482 phy 场景总结

1,BCM5482是一款双端口10/100/1000BASE-T以太网PHY芯片,支持多种速率和双工模式。其配置主要通过MDIO(Management Data Input/Output)接口进行,MDIO接口用于访问PHY芯片内部的寄存器,从而配置网络速率、双工模式以及其他相关参数。 a,具体以下面两种场景举例 2. 寄存器和…

RedHat磁盘的添加和扩容

前情提要 &#x1f9f1; 磁盘结构流程概念图&#xff1a; 物理磁盘 (/dev/sdX) └── 分区&#xff08;如 /dev/sdX1&#xff09;或整块磁盘&#xff08;直接使用&#xff09; └── 物理卷 (PV, 用 pvcreate) └── 卷组 (VG, 用 vgcreate) …

Lua—元表(Metatable)

原表解析 在 Lua table 中我们可以访问对应的 key 来得到 value 值&#xff0c;但是却无法对两个 table 进行操作(比如相加)。 因此 Lua 提供了元表(Metatable)&#xff0c;允许我们改变 table 的行为&#xff0c;每个行为关联了对应的元方法。 setmetatable(table,metatable…

一种运动平台扫描雷达超分辨成像视场选择方法——论文阅读

一种运动平台扫描雷达超分辨成像视场选择方法 1. 专利的研究目标与意义1.1 研究目标1.2 实际意义2. 专利的创新方法与技术细节2.1 核心思路与流程2.1.1 方法流程图2.2 关键公式与模型2.2.1 回波卷积模型2.2.2 最大后验概率(MAP)估计2.2.3 统计约束模型2.2.4 迭代优化公式2.3 …

Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException

看了二哥的foreach陷阱后&#xff0c;自己也遇见了需要循环删除元素的情况&#xff0c;立马想到了当时自己阴差阳错的避开所有坑的解决方式&#xff1a;先倒序遍历&#xff0c;再删除。之前好使&#xff0c;但是这次不好使了&#xff0c;报错Caused by: java.lang.UnsupportedO…

Ceph集群OSD运维手册:基础操作与节点扩缩容实战

#作者&#xff1a;stackofumbrella 文章目录 一、Ceph集群的OSD基础操作查看osd的ID编号查看OSD的详细信息查看OSD的状态信息查看OSD的统计信息查看OSD在主机上的存储信息查看OSD延迟的统计信息查看各个OSD使用率集群暂停接收数据集群取消暂停 OSD写入权重操作查看默认OSD操作…