版本化数据库管理工具Flyway介绍和Spring Boot集成使用

文章目录

      • 核心功能
      • 如何使用 Flyway
      • 最佳实践
      • Spring Boot使用

Flyway 是一个版本化数据库管理工具,用于跟踪、管理和应用数据库的变化。它非常适合在团队开发环境中使用,其中多个人员可能会在数据库结构进行更改。Flyway 通过版本控制可以帮助你确保所有人都在相同版本的数据库上工作,这有利于常规的开发和部署管道。

核心功能

  1. 版本控制: Flyway 通过版本脚本管理数据库变化历史,确保数据库状态的追踪和确定。
  2. 支持多种数据库: Flyway 支持所有常见的数据库系统,包括 MySQL, PostgreSQL, SQL Server等。
  3. 简体迁移: 只需简单的SQL脚本,即可迁移数据库,避免复杂的数据库迁移框架使用学习。
  4. 回滚支持: 支持版本回滚,方便恢复数据到某个历史状态。
  5. 集成&自动化: 能够与许多构建工具和环境集成,如Maven, Gradle, Spring Boot等。
  6. 社区和商业支持: 提供有免费的社区版和提供额外功能的商业版。

如何使用 Flyway

  • 下载和安装: 访问 Flyway 官网下载并安装合适版本。

  • 配置: 在项目中创建flyway.conf配置文件,设置数据库的URL、用户和密码等信息。

  • 创建迁移脚本: 使用标准的SQL创建迁移脚本,并根据约定的命名规则(如V1__Create_person_table.sql)存放在资源文件夹中。

  • 运行迁移: 使用Flyway命令(migrate)从命令行运行迁移。如果使用Spring Boot,它会在应用程序启动时自动执行迁移。

  • 检查状态: 使用info命令查看迁移的历史和当前状态。

  • 回滚: 如果需要,可以使用undo命令(商业版特性)回滚到之前的版本。

最佳实践

  • 版本命名规范: 保持一致的命名规则,以保证版本按正确顺序执行。
  • 不要修改已经发布的迁移: 一旦一个迁移脚本已经提交,就不要再对其进行修改。如果需要进行更改,就应该创建一个新的迁移脚本。
  • 持续集成: 在你的CI/CD流程中集成Flyway,以便自动应用数据库更改作为构建过程的一部分。
  • 测试迁移: 在实施任何迁移之前首先在一个测试环境中进行测试,以确保它们不会造成意外的后果。
  • 备份数据库: 在执行大规模的迁移之前,确保已备份数据库,以防需要恢复。

使用Flyway时,务必要记住数据库迁移和修改是一个严肃的任务,一旦迁移到生产环境,就会直接影响数据的完整性和应用程序的运行。因此,通常建议首先在开发和测试环境中执行和验证数据库迁移。

完整、系统地学习和实施Flyway,可以极大地提升数据库管理的效率和安全性,尤其是在多人合作和自动部署流程中。

Spring Boot使用

  • 引入依赖,可以在maven或者gradle里引入依赖,这里以我们程序使用的gradle为例
	// flywayimplementation 'org.springframework.boot:spring-boot-autoconfigure'implementation 'org.flywaydb:flyway-core'
  • 注意:如果flyway与Spring Boot版本不一致,会导致编译错误,可以不设置版本号,自动适配
  • 在配置文件application.yml里新增flyway配置
spring:flyway:enabled: true # 是否开启使用,默认开启schemas: publicencoding: UTF-8locations: classpath:db/migrationsql-migration-prefix: V # 前缀sql-migration-separator: __ # 版本号与名称的分隔符sql-migration-suffixes: .sql # 后缀table: flyway_schema_historybaseline-on-migrate: true # 是否在应用迁移脚本之前自动执行基线迁移,默认值是 falsevalidate-on-migrate: true # 是否在合并时开启校验baseline-version: 2.0.1.0 # 基线版本,等于低于这个版本,不校验,默认为1
  • 对于sql文件,默认在 db/migration 下,文件名称要符合配置规则
  • 项目启动时,会自动检测SQL文件,创建flyway_schema_history,并按照版本顺序执行SQL,进行表变动
  • 代码变动示例:SQL文件包含数据库表初始化和数据初始化,以及表结构变动,通过baseline-version参数进行版本更新
    在这里插入图片描述

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

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

相关文章

Redis-Day3实战篇-商户查询缓存(缓存的添加和更新, 缓存穿透/雪崩/击穿, 缓存工具封装)

Redis-Day3实战篇-商户查询缓存 什么是缓存添加Redis缓存业务流程项目实现练习 - 给店铺类型查询业务添加缓存 缓存更新策略最佳实践方案案例 - 给查询商铺的缓存添加超时剔除和主动更新 缓存穿透/雪崩/击穿缓存穿透概述项目实现 - 商铺查询缓存 缓存雪崩缓存击穿概述互斥锁逻辑…

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念,之前的租户Id拼接在请求上,有的是以Get,Param传参形式;有的是以Post,Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

使用pytest+selenium+allure实现web页面自动化测试

测试文件 base 基本方法data 测试数据page web页面相关操作image 测试截图log 日志文件report 测试报告文件temp 临时文件tool 文件读取,发邮件文件TestCases 测试用例 在page下的__init__.py文件下配置 import os import time from selenium.webdriver.common.by…

10 Vue3中v-html指令的用法

概述 v-html主要是用来渲染富文本内容,比如评论信息,新闻信息,文章信息等。 v-html是一个特别不安全的指令,因为它会将文本以HTML的显示进行渲染,一旦文本里面包含一些恶意的js代码,可能会导致整个网页发…

12、Qt:用QProcess类启动外部程序:简单使用

一、说明 简单使用:在一个函数中,使用QProcess类的临时对象调用可执行文件exe,只有这个exe执行完了,这个函数才往下执行,一次性打印出exe所有输出信息;复杂使用:创建QProcess类的全局对象&…

Python---TCP 客户端程序开发

1. 开发 TCP 客户端程序开发步骤回顾 创建客户端套接字对象和服务端套接字建立连接发送数据接收数据关闭客户端套接字 2. socket 类的介绍 导入 socket 模块 import socket 创建客户端 socket 对象 socket.socket(AddressFamily, Type) 参数说明: AddressFamily 表示IP地…

重塑数字生产力体系,生成式AI将开启云计算未来新十年?

科技云报道原创。 今天我们正身处一个历史的洪流,一个巨变的十字路口。生成式AI让人工智能技术完全破圈,带来了机器学习被大规模采用的历史转折点。 它掀起的新一轮科技革命,远超出我们今天的想象,这意味着一个巨大的历史机遇正…

医院影像科PACS系统源码,医学影像系统,支持MPR、CPR、MIP、SSD、VR、VE三维图像处理

PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以数字化的方式将各种医学影像,如核磁共振、CT扫描、超声波等保存起来,并在需要时能够快速调取…

057:vue组件方法中加载匿名函数

第057个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

宽带阻抗匹配的工程实现-第一步,端口驻波仿真

概要 ADS仿真,Matlab仿真,宽带阻抗匹配,smith圆图。 其实阻抗匹配我工作以来经常说,也经常做,但是基本上都是直接在印制板上进行调试。现在想先用仿真软件直接设计出来,才发现很多东西嘴上说容易&#xf…

力扣每日一题day36[112.路径总和]

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点…

nuxt打包占用磁盘IO

目录 前言排除过程 前言 jenkins运行打包,总是要卡一段时间,磁盘IO很高。我手动执行后的确发现了这个问题,如下图所示。 排除过程 我的方案很原始,利用git恢复到以前的版本,抽检,搞了差不多两个小时&am…

Megatron模型并行研究

Megatron模型并行研究 1. 技术调研 a. Megatron-LM Megatron-LM针对的是特别大的语言模型,使用的是模型并行的训练方式。但和普通的模型并行不同,他采用的其实是张量并行的形式,具体来说就是将一个层切开放到不同的GPU上,属于层…

XC8284B 高效率12MHz,34V升压LED驱动器 LED背光驱动、闪光灯

XC8284B是一个升压转换器驱动多达9个系列白色LED的单节离子电池设计的。其300mV反馈电压降低功率损耗,提高效率。优化后的工作频率可以满足LC滤波器小值和低工作电流的要求,具有较高的效率。内置软启动功能,可减少浪涌电流。微型封装类型为节…

论文中公式怎么降重 papergpt

大家好,今天来聊聊论文中公式怎么降重,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文中公式怎么降重 一、引言 在论文撰写过程中,公式是表达学…

【网络技术设备安全】BGP 基础与概述-2-中转 AS 中的 IBGP 路由传递

0x01 中转 AS 中的 IBGP 路由传递 参考该图: 上图,我们模拟一个 1.0 的路由通过 AS 65101 来传递 1:通过图可知,A 与 B 之间的 Peer 为 EBGP,B 与 E 之间为 Peer IBGP,E 与 F 之间为 Peer EBGP 邻接 2&a…

安卓好用的python编辑器,安卓平台python编辑器

本篇文章给大家谈谈安卓上好用的python编辑软件有哪些,以及安卓上好用的python编辑软件推荐,希望对各位有所帮助,不要忘了收藏本站喔。 1. 简介 Thonny是基于python内置图形库tkinter开发出来的支持多平台(windows,Mac,Linux)的python IDE&am…

文献速递:生成对抗网络医学影像中的应用—— CG-3DSRGAN:用于从低剂量PET图像恢复图像质量的分类指导的3D生成对抗网络

文献速递:生成对抗网络医学影像中的应用—— CG-3DSRGAN:用于从低剂量PET图像恢复图像质量的分类指导的3D生成对抗网络 本周给大家分享文献的主题是生成对抗网络(Generative adversarial networks, GANs)在医学影像中的应用。文献…

[已解决]HttpMessageNotReadableException: JSON parse error: Unexpected character:解析JSON时出现异常的问题分析与解决方案

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

人工智能对网络安全的影响

技术的快速发展带来了不断增长的威胁环境,网络犯罪分子和恶意行为者利用我们互联世界中的漏洞。在这个数字时代,数据泄露和网络攻击呈上升趋势,仅靠传统的安全措施已经不够了。人工智能 (AI) 的进步彻底改变了网络安全…