flyway最佳生产实践
为什么使用flyway
一般的部署流程
- 开发人员将应用程序打包、按顺序汇总并整理数据库升级脚本
- DBA拿到数据库升级脚本检查、备份、执行,以完成数据库升级
- 应部署人员拿到应用部署包,备份、替换,以完成应用程序升级
用上 Flyway 之后的应用部署流程大概是这样的:
- 开发人员将应用程序打包(直接jenkins piplen 流程线构建 这时候flyway就已经在对应的环境执行了,脚本已经在库里生成了)
- 应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本)—> 我们这边是Jenkins ci集成化构建部署,dockerfile构建镜像 ,k8s容器编排,在ci的过程中脚本就已经执行了,就不需要部署人员再去操作数据库了。
在我平时的团队开发中,我们的代码是有版本控制的,可以多人协作持续集成(工具也非常多)。但是数据库的脚本确实需要手动的去执行,团队内人多,你执行你的我执行我的,就会导致很多问题:
- 这台机器上的数据库处于什么状态?
- 此脚本是否已应用?
- 测试环境的数据库表结构和生产是否一致?
- 测试环境要新增一台应用实例,该如何搭建数据库,必备的数据和表结构如何快速同步?
所以工作中,经常听到测试小伙伴们抱怨,明明已经提测了,但是却出现 A环境正常运行,B环境就报错,找开发定位又花费很多时间。究其原因,大多数是因为数据库没有类似代码那样的版本控制自动化工具,导致管理混乱。
Flyway 这个数据库迁移库就是要解决这个问题的,可以帮我们根据数据库当前的状态,区分哪些脚本执行过,哪些没有执行,然后根据目标数据库的当前状态,决定应该执行哪些数据库脚本。
方案一
将flyway 单独维护在一个项目中,上线时手动操作,版本信息统一管理
项目地址
flyway
目录结构以及命名规范
项目结构
└─ibeautypass-ly-flyway
└─src
└─main
└─resources
└─db
└─migration
├─customer (命名规范:项目名称)
│ ├─version_1_0_0 (版本号 )
│ ├─V1_0_0_202204012042_02__create.sql (版本号 )
│ └─version_1_0_1
│ ├─V1_0_0_202204112042_02__update.sql (版本号 )
└─minapp (命名规范:项目名称)
├─version_1_0_0 (版本号 )
│ ├─V1_0_0_202204012042_01__create.sql (版本号 )
└─version_1_0_1
│ ├─V1_0_0_202204112042_01__update.sql (版本号 )
![image.png](https://img-blog.csdnimg.cn/img_convert/42953389a0c06e0b5465a80938c1b352.png#clientId=u85b77ec0-71ca-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=435&id=u90f1a424&margin=[object Object]&name=image.png&originHeight=544&originWidth=499&originalType=binary&ratio=1&rotation=0&showTitle=true&size=49535&status=done&style=none&taskId=ucd2cbd3f-d75f-4033-8be8-5145feb902e&title=项目结构以及命名规范&width=399.2 “项目结构以及命名规范”)
命名规范
在定义初始化脚本时,版本号建议为V+(编号)+yyyymmddhhmm+组号(一组01,二组02)+ __(为双下划线)+create,例如
V1_0_0_202204012042_01__create.sql。
在定义变更版本时,版本号为 V+(编号)+yyyymmddhhmm+组号(一组01,二组02)+ __(为双下划线)+update名称,例如
V1_0_0_202204112042_01__update.sql。
:::info
flyway最佳生产实践相关推荐
- nodejs 实践项目_NodeJS:最佳生产实践
nodejs 实践项目 by Saurabh Rayakwar 通过索拉比·雷阿克瓦尔 NodeJS:最佳生产实践 (NodeJS: Best Practices for Production) Th ...
- flyway常用配置_Spring Boot 2 实战:使用 Flyway 管理你数据库的版本变更
1. 前言 随着项目的不断迭代,数据库表结构.数据都在发生着变化.甚至有的业务在多环境版本并行运行.数据为王的时代,管理好数据库的版本也成为了迫切的需要.如何能做到像 Git 之类的版本控制工具来管理 ...
- SpringBoot系列: 使用 flyway 管理数据库版本
Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star 数 ...
- Maven学习总结(33)——开发人员如何使用 Flyway 插件管理数据库版本
一.前言. 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(开发.测试.维护人员)能够讲清楚当前环境下的数据库是哪个版本,与哪个版本的 ...
- Flyway数据库迭代升级迁移
Flyway简介 Flyway 是一款开源的数据库版本管理工具.它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本. 在项目或产品中,很难一开始就把业务理清楚,把数据 ...
- 怎样避免每次都解释大量指令?
简介:向量化引擎为PolarDB-X的表达式计算带来了显著的性能提升. 作者:君启 介绍 PolarDB-X是阿里巴巴自研的云原生分布式数据库,采用了计算-存储分离的架构,其中计算节点承担着大量的表达 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- 性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
本文为转载文章,作者:中华石杉,十余年BAT架构经验,倾囊相授.作者微信公众号:石杉的架构笔记(ID:shishan100) 一.写在前面 相信不少朋友都在自己公司使用Spring Cloud框架来构 ...
- 每秒上万并发下的Spring Cloud性能优化之道
一.写在前面 相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这是非常火的一门技术. 如果只是用户量很少的传统IT系统,使用Spring Cloud可能还暴露不出什么 ...
最新文章
- 不使用乘法、除法或mod,实现两数相除
- 06. 为知笔记 -- 我的修改
- RESET MASTER和RESET SLAVE使用场景和说明,以及清除主从同步关系
- 方正ceb阅读器手机版_海信阅读手机A5Pro 经典版评测:体验和阅读完美平衡
- java占用提示_Java显示使用或已经覆盖了api为啥?
- UA池和IP代理池使用
- list 根据某个数字所在位置_【Python学习笔记】09、使用list和tuple
- Mono for android,Xamarin点击事件的多种写法
- enter power save mode解决
- SAP License:初学作业费用分割
- Soul Api 网关发布 1.0.3-RELEASE 版本
- Java拥挤度,零基础学JAVA难不难?
- Keil MDK5 破解
- 供应链管理-降低产品复杂度
- powder-puff 花拳绣腿
- javax.faces.FacesException: Unable to find CDI BeanManager的解决方法
- MSP430F5529LP(一)IIC与OLED的HELLOWRLD
- 【H.264】码流解析 annexb vs avcc
- the unfamiliar words and sentences of《The Great Gatsby》1
- IDEA上传项目到GitHub
热门文章
- daimayuan每日一题#851 Good Permutations
- 批量修改照片名称的快速方法
- php计数器归零,php计数器lt;?/*-一个简单的计数器*/functio 爱问知识人
- 美国计算机加音乐专业,美国音乐博士解析
- 恋人日记服务器维护中,知乐日记:恋人不会在最终相遇 因为他们本来就一直在一起...
- 如何设置云服务器语言,云服务器如何更换语言
- 谷歌服务框架(google services framework)是什么?
- 什么软件可以听学业水平测试网课,免费听网课app推荐
- 计算机动漫与游戏制作初体验,《无尽远征》隐藏动画大师 启动“游漫双系统”之约...
- Pythonnbsp;异常处理