数据库版本控制工具--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.0
    baseline-version: 1.0
    # 是否开启flyway,默认true.
    enabled: true
    # 设置迁移时的编码,默认UTF-8.
    encoding: UTF-8
    # 当读取元数据表时是否忽略错误的迁移,默认false.
    ignore-failed-future-migration: false
    # 迁移脚本的位置,默认db/migration.
    locations: classpath:/flyway
    # 迁移时是否校验,默认为true
    validate-on-migrate: true
    # flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是 false 理论上作为默认配置是不科学的。
    clean-disabled: true
    # 验证错误时 是否自动清除数据库 高危操作!
    clean-on-validation-error: false
    #配置 Flyway 以允许非顺序迁移
    out-of-order: true

补充数据库相关的配置:

spring:
  datasource:
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为 master
      primary: master
      datasource:
        # 主库数据源
        master:
          type: your_connect_pool
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/your_database
          username: your_username
          password: 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.出现跳版本的情况,不允许再使用跳过的版本号,否则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyzcto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值