zoukankan      html  css  js  c++  java
  • 在 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 目录下添加脚本运行程序即会自动执行脚本

  • 相关阅读:
    Refined Architecture阶段
    将博客搬至CSDN
    第七周学习总结
    struts2框架学习三 ajax
    Data truncation: Truncated incorrect DOUBLE value: '张利杰'
    struts2框架学习二 action对jsp传值
    决策树
    struts2框架学习1
    寒假自学第十五天
    寒假自学第十四天
  • 原文地址:https://www.cnblogs.com/victorbu/p/12966259.html
Copyright © 2011-2022 走看看