ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库版本管理:flyway

2021-12-05 21:05:35  阅读:251  来源: 互联网

标签:数据库 flyway migration 版本 sql true


flyway,是一款数据库迁移工具,支持SQL脚本的自动备份和执行,在项目中非常方便我们进行部署应用到多套环境中初始化数据库或者升级数据库表的自动化工作。

文章目录

一、为什么要用flyway

​ 我们类比一下现在经常用到的Git版本控制工具,能够很好的管控我们的代码库版本,实现版本回溯、版本回退、版本提交等功能。

​ 而flyway实际上就是针对数据库层面的一种版本控制工具,它也能够很好的支持数据库版本的回溯、版本回退、版本提交等功能。

​ 在项目初建的时候我们可能需要将项目代码到多个环境中,比如开发环境、测试环境,并且数据库分成了开发库和测试库,同时我们还经常需要在开发过程中不断的去变更表结构。如果不引入flyway,那么我们只能手动去同步开发库与测试库,但是如果我们使用了flyway,那么我们只要将项目进行成功部署就可以实现数据库表结构自动同步。

二、怎么用flyway

  1. 首先引入pom依赖

    <!-- mysql驱动器 这里以8版本为例 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    <!--数据库版本控制-->
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>5.2.1</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.0</version>
    </dependency>
    
  2. 配置文件

    server:
      port: 8000
    
    spring:
      application:
        name: myflyway
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/myflyway?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
        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
    
  3. 初始化数据库环境

    新建myflyway库

  4. 创建DDL脚本

    创建脚本名称规范:

    img

​ 例如我创建第一个版本的建表的sql脚本文件,且表名为test,并取名为:V1.0.0_001_ddl_test.sql

UNLOCK TABLES;

CREATE TABLE IF NOT EXISTS `test` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '自增id主键',
  `name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;

UNLOCK TABLES;

将该文件放在resource/db/migration下

  1. 启动项目

    image-20211205204813601

image-20211205204830680

image-20211205204856932

可以看到我们的ddl脚本语句被成功执行,并且会自动创建一张flyway_schema_history表,里面记录了执行历史。

参考项目地址:https://gitee.com/dearvainycos/myflyway

其中踩了一个坑,假如我们使用了mysql作为数据库,那么使用flyway必须在pom文件中引入对应的mybatis依赖,否则将不会生效。

参考资料:

标签:数据库,flyway,migration,版本,sql,true
来源: https://blog.csdn.net/imVainiycos/article/details/121735264

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有