在 Spring Boot 中使用 Flyway

一、Flyway 介绍

Flyway 是一个开源的数据库迁移工具,MySQL, SQL Server, Oracle 等二十多种数据库

在 Flyway 中数据库的所有改变均称为迁移(migration),迁移分为两种:基于版本控制的迁移(versioned)和可重复执行的迁移(repeatable)。基于版本控制的又分为两种:常规迁移(regular)和撤销迁移(undo)

基于版本控制的迁移

包含版本(version)、描述(description )和总和校验码(checksum)。版本必须是唯一的(可以是递增的数字或者小版本,如1.2.3等),总和校验码的作用是在 Flyway 会逐个对比之前执行过的脚本的是否被修改,如果被修改则校验码结果不同,会报 checksum mismatch 错误,因此执行过的脚本不应该再修改,如果需要对已有数据表修改,应该新建一个脚本执行;基于版本控制的迁移仅按照版本的顺序执行一次,如果需要撤销,可以提供相同版本的撤销迁移来处理

可重复执行的迁移

包含描述(description )和总和校验码(checksum),但是没有版本(version)。每当校验码发生变化(即文件被修改)时均会执行,而不是仅执行一次;在单次迁移中,可重复执行的迁移按照描述的顺序在其他脚本执行后再执行

迁移的实现方式又分为两种:基于 SQL 脚本(SQL-based)的迁移和基于 Java 代码(Java-based)的迁移

基于 SQL 脚本的迁移

命名规则:[前缀][版本号][分隔符][描述][后缀],如:V2__Add_new_table.sql,R__Add_new_table.sql

  • 前缀:常规迁移是 V,撤销迁移是 U,可重复执行的迁移 是 R;前缀是可配置的
  • 版本号:使用下划线或者小数点分割
  • 分隔符:默认是两个下划线(可配置)
  • 描述:使用下划线或者空格分割
  • 后缀:默认是 .sql (可配置)

配置参数 validateMigrationNaming 用来配置命名不符合规范的处理方式:true 忽略不符合规范的文件,false 快速失败

基于 Java 代码的迁移

命名规则:[前缀][版本号][分隔符][描述],如:V2__Add_new_table,R__Add_new_table

  • 前缀:常规迁移是 V,撤销迁移是 U,可重复执行的迁移 是 R;前缀是可配置的
  • 版本号:使用下划线分割(下划线在运行时会自动替换为小数点)
  • 分隔符:两个下划线
  • 描述:使用下划线分割(下划线在运行时会自动替换为空格)

以上大部分内容为本人翻译自官网,原文:Migrations

二、在 Spring Boot 中使用

本文使用基于 SQL 脚本的迁移

2.1 添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

2.2 添加配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/flyway?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: root

  flyway:
    enabled: true
    clean-disabled: true # 生产环境一定要设置为 true
    clean-on-validation-error: false
  #    locations: classpath:db/migration # 脚本位置,默认是 classpath:db/migration

在 db/migration 目录下添加脚本运行程序即会自动执行脚本

原文地址:https://www.cnblogs.com/victorbu/p/12966259.html