02. Springboot集成Flyway

目录

1、前言

2、什么是Flyway?

3、为什么要使用 Flyway?

4、简单示例

4.1、创建Spring Boot工程

4.2、添加Flyway依赖

4.3、Springboot添加Flyway配置

4.4、创建执行SQL脚本

4.5、启动测试

4.6、Flyway版本管理

5、SQL脚本文件命名规则

6、使用注意事项


1、前言

在现代应用程序开发中,数据库的变化是一个不可避免的过程。为了管理数据库版本、维护迁移历史记录和确保开发团队之间的一致性,Flyway 是一个强大的数据库迁移工具,而与 Spring Boot 集成可以让我们更轻松地进行数据库版本管理。

2、什么是Flyway?

Flyway 是一个开源的数据库迁移工具,它允许开发人员轻松地管理数据库的结构变化。通过使用 Flyway,您可以跟踪数据库架构的版本,并自动执行升级、回滚和迁移操作。Flyway 的核心思想是将数据库迁移脚本与应用程序代码分开,确保数据库的演进可以与代码的演进分开管理。

官网地址:Homepage - Flyway

3、为什么要使用 Flyway?

为了更好地理解为什么要使用 Flyway,让我们看一下一些使用 Flyway 的主要优势:

  1. 版本控制:Flyway 允许您将数据库架构的变化纳入版本控制系统中,就像您对应用程序代码做的那样。这样,您可以轻松跟踪数据库变化的历史记录,并在需要时进行回滚。
  2. 协作:当多个开发人员共同工作在一个项目中时,Flyway 可以确保每个人都使用相同的数据库架构。这有助于避免由于数据库不一致而引发的问题。
  3. 自动化:Flyway 提供了自动执行数据库迁移脚本的功能。这意味着您不需要手动运行 SQL 脚本来更新数据库,Flyway 会在应用程序启动时自动检测并执行必要的迁移。
  4. 回滚:如果出现问题,Flyway 允许您回滚到先前的数据库版本,从而避免了可能的数据丢失或破坏。

4、简单示例

4.1、创建Spring Boot工程

创建demo工程springboot-flyway,并集成好基本的springboot环境。

4.2、添加Flyway依赖

里需要注意MySQL版本,我这边安装的是MySQL5.7,所以flyway支持的最高版本为7.15.0。其他版本的对应关系为:

Flyway 8.x 和 MySQL 版本支持:

  • Flyway 8.x 版本通常支持 MySQL 8 和更高版本。

Flyway 7.x 和 MySQL 版本支持:

  • Flyway 7.x 版本通常支持 MySQL 5.7 和更高版本。
  • Flyway 7.0.0 引入了对 MySQL 8.0 JSON 数据类型的支持。

Flyway 6.x 和 MySQL 版本支持:

  • Flyway 6.x 版本支持 MySQL 5.7 和更高版本。

Flyway 5.x 和 MySQL 版本支持:

  • Flyway 5.x 版本支持 MySQL 5.1 以上的版本。
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>7.15.0</version>
</dependency>

4.3、Springboot添加Flyway配置

spring:datasource:dynamic:primary: primary# mysql数据源配置datasource:primary:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/flyway-demo?useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: rootflyway:# 是否开启flywayenabled: trueencoding: utf-8# 默认存放sql脚本目录,默认为db/migrationlocations: classpath:db/migration# sql脚本文件名前缀,默认大写Vsql-migration-prefix: V# sql脚本文件名称的分隔符,默认2个下划线__sql-migration-separator: __# 迁移sql脚本文件名称的后缀sql-migration-suffixes: .sql# metadata 版本控制信息表 默认 flyway_schema_historytable: flyway_schema_history# 指定 baseline 的版本号,默认值为 1, 低于该版本号的 SQL 文件, migrate 时会被忽略baseline-version: 1

4.4、创建执行SQL脚本

在resources下创建db/migration目录。并创建执行MySQL脚本文件:

创建V1.0.0__create_user.sql:

CREATE TABLE IF NOT EXISTS `user`
(`USER_ID`      INT          NOT NULL AUTO_INCREMENT,`USER_NAME`    VARCHAR(100) NOT NULL COMMENT '用户姓名',`AGE`          INT          NOT NULL COMMENT '年龄',`CREATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,`CREATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',`UPDATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,`UPDATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',PRIMARY KEY (`USER_ID`)) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;

创建V1.0.0__create_role.sql:

CREATE TABLE IF NOT EXISTS `role`
(`ROLE_ID`      INT          NOT NULL AUTO_INCREMENT,`ROLE_NAME`    VARCHAR(100) NOT NULL COMMENT '角色姓名',`CREATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,`CREATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',`UPDATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,`UPDATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',PRIMARY KEY (`ROLE_ID`)) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;

4.5、启动测试

可以看到flyway-demo数据库已经成功执行了脚本文件。

查看MySQL,表已经成功创建。

4.6、Flyway版本管理

除了我们创建的role和user表以外,还有flyway_schema_history表。这个是用于记录数据库迁移的历史记录和状态信息。这个表的存在是为了跟踪和管理数据库的版本控制,以确保数据库的迁移和结构变更是可管理的和可追溯的。打开可以看到我们所执行的变迁脚本记录:

通过维护 flyway_schema_history 表,Flyway 可以在应用程序启动时检查数据库的当前状态,并确定需要应用的新迁移脚本。如果有新的脚本需要应用,Flyway 将自动执行这些脚本,确保数据库的结构与应用程序的版本保持一致。

5、SQL脚本文件命名规则

执行方式+版本号__sql名称.sql脚本后缀
---//例子:
V1.0.0__create_table.sql
  1. 以 V 开头的,仅执行一次。通常用于DDL表结构操作。V+版本后(版本号间的数字以“.” 或者“ _ ”分隔开,“ _ ”会自动编译成 “ . ” )+" __"+文件描述+后缀名。例如:V1.0.0__create_user.sql。
  2. 以 R 开头的,可以执行多次。如R__optimazed_user.sql。
  3. V开头的脚本文件,执行优先级一定比R的高。
  4. 版本号以最左对齐原则,如:
    1. 1.0.1比1.0.0版本高。
    2. 1.0.1.1比1.0.1版本高。
    3. 1.10.0比1.9.9版本高。

6、使用注意事项

  1. 迁移脚本命名规则:Flyway 依赖于迁移脚本的命名规则,通常是以版本号开头,后跟双下划线和描述性名称,例如 V1__create_table.sql。版本号用于确定脚本的执行顺序。
  2. 不要修改已应用的迁移脚本: 一旦迁移脚本被应用,不应修改它们。如果需要更改数据库结构,应创建一个新的迁移脚本来处理变化。
  3. 备份和回滚策略: 在进行数据库迁移之前,务必备份数据库以防止意外情况。Flyway 支持回滚到先前的版本,但仍然建议在生产环境中小心谨慎。
  4. 多环境配置: 使用 Spring Boot 配置文件来为不同的环境(开发、测试、生产)提供不同的数据库连接信息和 Flyway 配置。
  5. 监控和日志:配置适当的监控和日志记录以跟踪迁移的执行情况,以及处理可能出现的错误。

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

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

相关文章

荣誉加冕!八方锦程再次荣获招聘与任用价值大奖

智享会ALL IN 2023 人力资源服务展汇聚了全国32个省市地区,21个行业的HR从业者、上下游客户,9月19-20日齐聚上海跨国采购会展中心,共同见证ALL IN 2023的盛大开幕! 作为人力资源行业的奋进者,八方锦程与智享会同行走过了几载春秋,始终致力于推进人力资源服务高质量发展。 在本…

面试题:HTTPS 是如何保证传输安全的?又被问了!

文章目录 1. HTTP 协议1.1 HTTP 协议介绍1.2 HTTP 中间人攻击1.3 防止中间人攻击 2. HTTPS 协议2.1 HTTPS 简介2.2 CA 认证体系 总结 1. HTTP 协议 在谈论 HTTPS 协议之前&#xff0c;先来回顾一下 HTTP 协议的概念。 1.1 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议&…

SpringBoot调用ChatGPT-API实现智能对话

目录 一、说明 二、代码 2.1、对话测试 2.2、单次对话 2.3、连续对话 2.4、AI绘画 一、说明 我们在登录chatgpt官网进行对话是不收费的&#xff0c;但需要魔法。在调用官网的API时&#xff0c;在代码层面上使用&#xff0c;通过API KEY进行对话是收费的&#xff0c;不过刚…

基于Java社区生鲜电商平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

网络爬虫-----爬虫的分类及原理

目录 爬虫的分类 1.通用网络爬虫&#xff1a;搜索引擎的爬虫 2.聚焦网络爬虫&#xff1a;针对特定网页的爬虫 3.增量式网络爬虫 4.深层网络爬虫 通用爬虫与聚焦爬虫的原理 通用爬虫&#xff1a; 聚焦爬虫&#xff1a; 爬虫的分类 网络爬虫按照系统结构和实现技术&#…

所有人别错过!云计算真的不错,前景钱途并存!

近年来&#xff0c;中国云计算产业发展迅猛&#xff0c;保持30%以上的年均增长率&#xff0c;成为全球增速最快的市场之一&#xff0c;云计算应用领域正向制造、政务、金融、医疗、教育等企业级市场延伸拓展。目前&#xff0c;云计算应用的普及促使开源技术广受关注&#xff0c…

Linux内核源码分析 (B.5)推演 slab 内存池的设计与实现

Linux内核源码分析 (B.5)推演 slab 内存池的设计与实现 文章目录 Linux内核源码分析 (B.5)推演 slab 内存池的设计与实现[toc] 1\. 前文回顾2\. 既然有了伙伴系统&#xff0c;为什么还需要 Slab ?3\. slab 对象池在内核中的应用场景4\. slab, slub, slob 傻傻分不清楚5\. 从一…

C语言的编译过程详解

当我们编译C程序时会发生什么&#xff1f;编译过程中的组件有哪些&#xff0c;编译执行过程是什么样的? 什么是编译 C语言的编译过程就是把我们可以理解的高级语言代码转换为计算机可以理解的机器代码的过程&#xff0c;其实就是一个翻译的过程。 …

低噪声 256 细分微步进电机驱动MS35774/MS35774A(汽车应用级别)

MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片&#xff0c;芯片内置功率 MOSFET&#xff0c;长时间工作的平均电 流可以达到 1.4A&#xff0c;峰值电流 2A。芯片集成了过温保护、欠压 保护、过流保护、短地保护、短电源保护功能。 主要特点 ◼ 2 相步进电机…

揭秘期权卖方稳赚的方法策略!

期权的卖方&#xff08;也称为房东包租婆&#xff09;是指出售期权合约的人&#xff0c;其赚取的费用被称为期权权利金。也就是房租租金&#xff0c;作为卖方&#xff0c;您有义务在期限内按照合约规定的价格出售或购买标的资产&#xff0c;下文介绍期权卖方稳赚的方法策略有哪…

国外发达国家码农是真混得好么?

来看看花旗工作十多年的码农怎么说吧! 美国最大的论坛 Reddit&#xff0c;之前有一个热帖&#xff1a; 一个程序员说自己喝醉了&#xff0c;软件工程师已经当了10年&#xff0c;心里有 好多话想说&#xff0c;“我可能会后悔今天说了这些话。”他洋洋洒洒写了 一大堆&#xff…

Hive内置函数字典

写在前面&#xff1a;HQL同SQL有很多的类似语法&#xff0c;同学熟悉SQL后一般学习起来非常轻松&#xff0c;写一篇文章列举常用函数&#xff0c;方便查找和学习。 1. 执行模式 1.1 Batch Mode 批处理模式 当使用-e或-f选项运行$ HIVE_HOME / bin / hive时&#xff0c;它将以…

数据挖掘十大算法

参考&#xff1a; ICDM&#xff1a;数据挖掘十大算法

1、RocketMQ概述

第1章 RocketMQ概述 一、MQ概述 1、MQ简介 MQ&#xff0c;Message Queue&#xff0c;是一种提供消息队列服务的中间件&#xff0c;也称为消息中间件&#xff0c;是一套提供了消息生 产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。 2、MQ用途 从网上…

AI文本创作在百度App发文的实践

作者 | 内容生态端团队 导读 大语言模型&#xff08;LLM&#xff09;指包含数百亿&#xff08;或更多&#xff09;参数的语言模型&#xff0c;这些模型通常在大规模数据集上进行训练&#xff0c;以提高其性能和泛化能力。在内容创作工具接入文心一言AI能力后&#xff0c;可以为…

无涯教程-JavaScript - SIGN函数

描述 SIGN功能确定数字的符号。该函数返回- 如果数字为正,则为1 如果数字为0,则零(0) -1,如果数字为负 语法 SIGN (number)争论 Argument描述Required/OptionalNumberAny real number.Required Notes 如果指定的数字未被识别为数字值,则SIGN返回#VALUE!错误。 适用性 …

阿里云通义千问向全社会开放,近期将开源更大参数规模大模型

9月13日&#xff0c;阿里云宣布通义千问大模型已首批通过备案&#xff0c;并正式向公众开放&#xff0c;广大用户可登录通义千问官网体验&#xff0c;企业用户可以通过阿里云调用通义千问API。 通义千问在技术创新和行业应用上均位居大模型行业前列。IDC最新的AI大模型评估报告…

网络路径监控分析

不间断的连接应该是任何企业的首要任务。然而&#xff0c;确保网络中的源和目标之间持续、不间断的联系一直是网络通信中一个劳动密集型的过程。了解网络路径中的障碍、识别它们并迅速解决它们以维护健康、不间断的网络至关重要。 为什么要监控网络路径 维护网络运行状况是任…

【 Linux】Linux调试器 - gdb

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;Linux &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【Linux】…

【Springboot】整合kafka

目录 安装zookeeperjdk安装zookeeper安装 安装kafka&#xff08;非集群&#xff09;springboot项目整合配置 安装zookeeper jdk安装 环境准备&#xff1a;CentOS7&#xff0c;jdk1.8 步骤如下&#xff1a; 下载自己需要的版本 这里使用的jdk1.8&#xff0c;获取链接如下 链接…