当前位置: 首页 > news >正文

数据库版本控制工具--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.出现跳版本的情况,不允许再使用跳过的版本号,否则会报错。

相关文章:

  • CSDN 中 LaTeX 数学公式输入方法
  • 思考:(linux) tmux 超级终端快速入门的宏观思维
  • c++ using使用
  • 通信原理绪论
  • JDBC工具类的三个版本
  • 【python】json解析:invalid literal for int() with base 10: ‘\“\“‘“
  • 工厂节能新路径:精准节能的深度剖析
  • YOLO目标检测算法评估标准
  • C++STL——stack,queue
  • Python3(30) 正则表达式
  • 两数相加(2)
  • Profinet转CanOpen网关,打破协议壁垒的关键技术
  • 国内特殊车辆检测数据集VOC+YOLO格式4930张3类别
  • NVMe控制器IP设计之接口模块
  • Python核心编程深度解析:作用域、递归与匿名函数的工程实践
  • Python自动化-python基础(下)
  • C++中的static_cast:类型转换的安全卫士
  • 警备,TRO风向预警,In-N-Out Burgers维权风暴来袭
  • 基于Python的在线教育平台的设计与实现
  • 红黑树删除的实现与四种情况的证明
  • 雷军:过去一个多月是创办小米以来最艰难的时间
  • 现场丨“影像上海”启幕:串联摄影、电影与当代艺术
  • 一季度全国消协组织为消费者挽回经济损失23723万元
  • 中国证监会:帮助受关税政策影响较大的上市公司纾困解难
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 罗马尼亚总理乔拉库宣布辞职