• 数据库迁移工具flyway的使用与详解


    1.简介

    Flyway 是一个开源的数据库迁移工具。它强烈支持简单性和约定而不是配置。它仅基于 7 个基本命令: Migrate、 Clean、 Info、 Validate、 Undo、 Baseline和 Repair。

    迁移可以用SQL (支持特定于数据库的语法(例如 PL/SQL、T-SQL 等))或Java (用于高级数据转换或处理 LOB)编写。

    它有一个命令行客户端。如果您使用的是 JVM,我们建议您使用Java API 在应用程序启动时迁移数据库。或者,您也可以使用Maven 插件 或Gradle 插件。

    如果这还不够,还有 适用于 Spring Boot、Dropwizard、Grails、Play、SBT、Ant、Griffon、Grunt、Ninja 等的插件!

    Flyway的GitHub地址如下:

    https://github.com/flyway/flyway
    

    2.数据迁移

    Flyway 对数据库的所有更改都称为迁移。迁移可以是版本化的或 可重复的。版本化迁移有两种形式:常规和撤消。

    版本化迁移有一个版本、一个描述和一个校验和。版本必须是唯一的。该描述纯粹是提供信息,让您能够记住每次迁移的作用。校验和用于检测意外更改。版本化迁移是最常见的迁移类型。它们只按顺序应用一次。

    可选地,可以通过提供具有相同版本的撤消迁移来撤消它们的影响。可重复的迁移有描述和校验和,但没有版本。不是只运行一次,而是在每次校验和更改时(重新)应用它们。

    在单个迁移运行中,可重复的迁移总是最后应用,在所有挂起的版本化迁移都已执行之后。可重复迁移按其描述的顺序应用。默认情况下,版本化和可重复迁移都可以用SQL 或Java编写,并且可以由多个语句组成。

    Flyway 自动发现文件系统和 Java类路径上的迁移。为了跟踪哪些迁移已在何时以及由谁应用,Flyway 向您的架构添加了一个架构历史记录表。

    3.使用示例

    项目结构:

    ├─.idea
    │  └─libraries
    ├─.mvn
    │  └─wrapper
    ├─src
    │  ├─main
    │  │  ├─java
    │  │  │  └─com
    │  │  │      └─flywaydemo
    │  │  └─resources
    │  │      └─db
    │  │          └─migration
    │  └─test
    │      └─java
    │          └─com
    │              └─flywaydemo
    └─target
        ├─classes
        │  ├─com
        │  │  └─flywaydemo
        │  └─db
        │      └─migration
        ├─generated-sources
        │  └─annotations
        ├─generated-test-sources
        │  └─test-annotations
        └─test-classes
            └─com
                └─flywaydemo
    

    maven依赖:

    <dependencies>
        <!--引入flyway-->
        <dependency>
            <groupId>org.flywaydb</groupI
            <artifactId>flyway-core</arti
            <!--可根据GitHub最新版本编写-->
            <version>6.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.
            <artifactId>spring-boot-start
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-j
        </dependency>
        <dependency>
            <groupId>org.springframework.
            <artifactId>spring-boot-start
        </dependency>
        <dependency>
            <groupId>org.springframework.
            <artifactId>spring-boot-start
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    在resources文件夹下创建db/migration目录,在此目录中创建sql脚本,格式为:版本号+分隔符+描述,如V1.0__v1__Init_Table.sql。示例sql如下:

    CREATE TABLE `t_user` (
      `id` int NOT NULL AUTO_INCREMENT COMMENT '账号id',
      `name` varchar(63) COLLATE utf8mb4_general_ci DEFAULT NULL,
      `password` varchar(200) COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号密码',
      `phone` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '手机号',
      `email` varchar(30) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '邮箱',
      `enable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
      `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    

    application.yml文件:

    spring:
      # 数据库连接配置
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT&allowPublicKeyRetrieval=true
        username: root
        password: root
      flyway:
        # 是否启用flyway
        enabled: true
        # 编码格式,默认UTF-8
        encoding: UTF-8
        # 迁移sql脚本文件存放路径,默认db/migration
        locations: classpath:db/migration
        # 迁移sql脚本文件名称的前缀,默认V
        sql-migration-prefix: V
        # 迁移sql脚本文件名称的分隔符,默认2个下划线__
        sql-migration-separator: __
        # 迁移sql脚本文件名称的后缀
        sql-migration-suffixes: .sql
        # 迁移时是否进行校验,默认true
        validate-on-migrate: true
        # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
        baseline-on-migrate: true
    

    然后启动项目,控制台正常输出后后查看数据。

    在数据库中查看相关的数据变更,可以看到flyway_schema_history表插入了sql的执行记录。

    查看插入的数据表如下所示。

  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/charlypage/p/15547036.html
Copyright © 2020-2023  润新知