使用 Flyway 优雅地管理数据库迁移

news/2024/12/19 8:15:48/

数据库迁移痛点

在开发一个应用的过程中,数据库 schema 经常需要修改 - 添加表、字段、索引等。这将导致开发、测试和生产环境的数据库 schema 不同,给开发和部署带来困难。
为了解决这个问题,我们需要一种管理数据库变更的机制,这就是数据库迁移。
目标是:

  • 跟踪数据库的变更
  • 可以进行前进和回滚迁移
  • 使开发、测试和生产环境的数据库保持一致

Flyway简介

Flyway 是一款开源的数据库迁移工具。它可以管理SQL脚本来演进数据库schema,并将开发、测试和生产环境的数据保持同步。
Flyway的主要特征是:

  • 可以将SQL脚本和数据库绑定在一起(通过文件名),这样就可以准确的检测到数据库的当前状态
  • 支持前进迁移和回滚迁移
  • 具有"语义版本控制" - 通过文件名确定迁移脚本的顺序
  • 支持SQL和Java两种迁移脚本
  • 可以在CI/CD管道中集成,保证开发、测试和生产环境的一致性
    使用Flyway进行数据库迁移
    这里以一个简单的例子来说明如何使用Flyway进行数据库迁移:
  1. 添加Flyway依赖。以Maven为例:
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>6.5.3</version> 
</dependency>
  1. 创建迁移脚本。文件名遵循V{版本号}__{描述}.sql的格式。例如:
V1__Create_user_table.sql
V2__Add_email_column.sql
  1. 在程序中配置Flyway
Flyway flyway = Flyway.configure() .dataSource("jdbc:mysql://localhost/mydatabase", "username", "password").locations("classpath:db/migration")    // 迁移脚本目录.encoding("UTF-8")                      // 编码.schemas("my_schema")                  // schema名字.table("schema_version")               // 元数据表名.baselineOnMigrate(true)               // 第一次运行时创建baseline.validateOnMigrate(false)              // 迁移时不校验SQL.load();
flyway.migrate();                        // 执行迁移
  1. 执行迁移
    调用 flyway.migrate() 时,Flyway 会执行所有未执行的迁移脚本,将数据库更新到最新版本。
    在第一次运行时,会创建一个 schema_version 表,用来保存迁移的元数据信息。
  2. 其他操作
    Flyway 还提供了许多其他 API :
  • flyway.baseline() : establishing a new baseline for a database derby
  • flyway.repair() : 修复损坏的迁移
  • flyway.clean() : 在迁移前清理数据库
  • flyway.info() : 打印迁移信息
  • flyway.undo() : 执行回滚迁移

springboot中如何使用

在 Spring Boot 中使用 Flyway 也很简单。我们只需要添加 flyway 的 starter依赖,并在 application.properties 文件中配置 Flyway 即可。

  1. 添加依赖
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-spring-boot-starter</artifactId><version>6.5.3</version>
</dependency>
  1. 配置 Flyway
    在 application.properties 中添加:
spring.flyway.url=jdbc:mysql://localhost/mydatabase
spring.flyway.user=username
spring.flyway.password=password 
spring.flyway.locations=classpath:db/migration    # 迁移脚本目录
  1. 编写迁移脚本
    迁移脚本名称同上,放在 classpath:db/migration 目录下。
  2. 启动应用
    当 Spring Boot 应用启动时,Flyway 会自动执行所有未执行的迁移脚本,将数据库更新到最新版本。
    同时,Flyway 也会在应用启动阶段执行初始化或修复操作。我们可以在配置文件中指定:
spring.flyway.baseline-on-migrate=true   # 第一次启动时创建baseline 
spring.flyway.repair=true                # 启动时检查并修复损坏的迁移 
spring.flyway.clean-on-validation-error=true # 校验 SQL 错误时,自动清理并重试

这样,Spring Boot 应用的数据库就能够在应用第一次启动时自动 initializing 到最新版本,并在之后保持同步。这大大简化了我们在不同环境之间维持一致数据库 schema 的难度。
在开发过程中,数据库schema 的变更也变得更加容易和流畅。我们只需要添加新迁移脚本,重启 Spring Boot 应用,Flyway 就会自动执行迁移将数据库更新到最新版本。


http://www.ppmy.cn/news/119117.html

相关文章

Linux:MBR 扇区故障处理 (备份|恢复)

大概思路&#xff1a; 我们准备一个硬盘&#xff0c;并分出一个分区用于单独存放MBR备份文件 或者 和别的文件放在一起也可以&#xff08;前提是不怕乱&#xff09; 然后将分区挂载 然后进行MBR备份 把备份文件放到分区里 然后对MBR进行破坏&#xff08;仅供实验参考&…

JAVA并发编程之多线程

线程的理解&#xff1a; 每个运行的程序都是一个进程&#xff0c;在一个进程中还可以有多个执行单元同时运行&#xff0c;这些运执行单元可以看作程序执行的一 条路径&#xff0c;被称为线程。线程是CPU调度和执行的单位。操作系统中的每一个进程中都至少存在一个线程。当一个…

攒机零件价格二手微型计算机,二手DIY攒机:这种SSD闭着眼买

解释为什么CPU特别不容易坏的文章有很多。大家也都知道了CPU几乎是电脑中最不容易坏的硬件之一。因此&#xff0c;许多朋友在组装电脑时会选择跑到某鱼平台入手一块二手CPU。通常情况下确实不会出问题&#xff0c;而且可以省下一笔资金用于其他配件的升级。 但&#xff0c;主板…

如何选购计算机硬件,DIY攒机经验之谈:十年老司机教你组装电脑如何选购硬件...

如今&#xff0c;玩游戏的玩家绝大数都是选择组装机&#xff0c;组装机主要优势就是价格便宜&#xff0c;硬件能够按需搭配&#xff0c;不像品牌机&#xff0c;配置方面搭配均衡性很差&#xff0c;往往显卡都是比较低端的&#xff0c;因此在游戏体验会十分不理想。下面装机之家…

图像处理计算机基本配置,图形图像工作的电脑配置推荐_DIY攒机硬件郎中-中关村在线...

对于从事图像设计的朋友来说&#xff0c;对电脑的要求与普通人就有些不一样了。如果是照片、3D动画、CAD设计、3DS渲染等工作&#xff0c;对内存、硬盘读写速度、CPU的处理速度会有所要求&#xff0c;但是压力并不大&#xff0c;主流电脑即可胜任&#xff0c;但是如果要使用电脑…

我是学计算机的,我也攒机了

原文在这里 http://yandong.org/?p=269 好吧,今天攒了个电脑,人生完整了,我是学计算的,就是干这个的

计算机配件声卡,DIY组装电脑到底需要哪些配件 攒机网卡声卡之类的要买吗

对于台式电脑&#xff0c;现在大部分人都会选择自己去攒一台&#xff0c;那么下面就来告诉大家&#xff0c;自己DIY一台电脑出来到底有哪些配件是需要的。 组装电脑需要哪些配件?硬件清单如下&#xff1a; 1、CPU (又称处理器&#xff0c;目前只要两家品牌&#xff1a;Intel平…

攒机计划

键盘&#xff1a;罗技波影手 鼠标&#xff1a;罗技LX3 Plus cpu散热器&#xff1a;超频三红海标准版HP-928 &#xff0c;酷冷至尊冰玲珑&#xff08;静音版&#xff09;&#xff0c;九州风神贝塔400 plus 路由器&#xff1a;腾达W311R&#xff0c; 腾达W548D &#xff0c…