数据库版本管理框架-Flyway

  • 一、flyway简介
  • 二、使用Flyway背景
  • 三、Springboot集成Flyway
    • 1.引入依赖
    • 2.配置文件 yml
    • 3.新建flyway文件夹和sql文件
      • 3.1 根据第2步配置了迁移脚本目录,我们在 src/main resources 目录下创建flyway目录,如下图:
      • 3.2 下面我们创建两个sql脚本,一个创建一张新表,一个插入一条数据,这里的命名规则: V + 版本号 + __ + 表名 + 操作DML类型 + .sql ,如上图:
    • 4.修改pom.xml配置
    • 5.启动项目

一、flyway简介

Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。

二、使用Flyway背景

部门开发一直是后端人员自行维护新增脚本,所以每次部署项目测试,都需要后端开发人员将 sql脚本在对应环境数据库上执行一遍,这样就造成有时候脚本文件混乱或者忘记执行,导致一些不必要的麻烦,所以就想要使用一款可以记录SQL文件版本迭代的工具。

三、Springboot集成Flyway

废话少说,我们直接开始进行Springboot的集成吧。
首先看一下Flyway执行流程:
1)Flyway 会扫描配置的脚本目录下的脚本文件;
2)如果历史记录表不存在,则新建历史记录表;
3)如果是一次性执行脚本(V),按版本号从小到大执行迁移脚本,与当前历史表中的版本号做对比,大于当前版本号的脚本才会被执行迁移;
4)如果是可重复执行脚本(R),检查脚本是否有变动,有变动的可重复脚本才会被执行迁移;

1.引入依赖

Springboot2.x版本已经对Flyway有所依赖了,我们直接引入,不需要进行版本的申明,有时你写上版本号还可能被项目自动覆盖哦,这块注意检查一下。

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

2.配置文件 yml

要迁移的数据库的 DB url。 如果未设置,则使用主要配置的数据源,正常我们的项目都有jdbc的连接信息,我们使用默认就行,无需配置。

pring:flyway:# 开启 flywayenabled: true# 检测迁移脚本的路径是否存在,如不存在,则抛出异常check-location: true# 是否禁用数据库清理clean-disabled: true# SQL 迁移的编码encoding: UTF-8# 迁移脚本的位置,默认db/migration.locations: classpath:flyway# 版本记录信息表table: tb_flyway_history# SQL 迁移的文件名前缀。sql-migration-prefix: V# SQL 迁移的文件名分隔符。sql-migration-separator: __# SQL 迁移的文件名后缀。sql-migration-suffixes: .sql# 是否在执行迁移时自动调用验证。validate-on-migrate: true# 迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.baseline-on-migrate: true

3.新建flyway文件夹和sql文件

  • Flyway 的默认扫描迁移脚本目录在:spring.flyway.locations: classpath:db/migration,用于扫描的迁移脚本目录
  • Flyway 的默认版本变化记录表名称:spring.flyway.table: flyway_schema_history,用于记录所有的版本变化记录

3.1 根据第2步配置了迁移脚本目录,我们在 src/main resources 目录下创建flyway目录,如下图:

3.2 下面我们创建两个sql脚本,一个创建一张新表,一个插入一条数据,这里的命名规则: V + 版本号 + __ + 表名 + 操作DML类型 + .sql ,如上图:

SQL脚本的命名规则

  • 前缀:V用于版本化(可配置), U用于撤消(可配置)和 R用于可重复迁移(可配置)
  • 版本:带点或下划线的版本可以根据需要分开多个部分(不适用于可重复的迁移)
  • 分隔符 :( __两个下划线)(可配置)
  • 描述:下划线或空格分隔单词
  • 后缀:.sql(配置)
-- V1.0.0__user_create.sql 创建标签表
DROP TABLE IF EXISTS tb_user;
CREATE TABLE `tb_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',`user_code` varchar(100) DEFAULT NULL COMMENT '用户code',`user_name` varchar(50) DEFAULT NULL COMMENT '用户名称',`user_type` int(2) DEFAULT 3 COMMENT '用户类型',`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';-- V1.0.1__user_insert.sql 标签表插入数据
INSERT INTO tb_user
(user_code, user_name, user_type)
values("U12345", "张三", 1);

4.修改pom.xml配置

扫描配置文件,许多项目是没有 **/*.sql 配置的,这样在上述的flyway目录下创建完sql启动时就会报错。所以如果你报错了那就配置上吧。

<resource><directory>src/main/resources</directory><includes><include>bootstrap.yml</include><include>**/*.xml</include><include>**/*.sql</include></includes>
</resource>

5.启动项目

2022-05-17 16:13:37.912||||[main] INFO  o.f.core.internal.database.base.DatabaseType 49 - Database: jdbc:mysql://localhost:3366/db (MySQL 5.7)
2022-05-17 16:13:37.999||||[main] INFO  org.flywaydb.core.internal.command.DbValidate 49 - Successfully validated 2 migrations (execution time 00:00.048s)
2022-05-17 16:13:38.025||||[main] INFO  org.flywaydb.core.internal.command.DbMigrate 49 - Current version of schema `db`: << Empty Schema >>
2022-05-17 16:13:38.039||||[main] INFO  org.flywaydb.core.internal.command.DbMigrate 49 - Migrating schema `db` to version "1.0.0 - create"
2022-05-17 16:13:38.123||||[main] INFO  org.flywaydb.core.internal.command.DbMigrate 49 - Migrating schema `db` to version "1.0.1 - insert"
2022-05-17 16:13:38.157||||[main] INFO  org.flywaydb.core.internal.command.DbMigrate 49 - Successfully applied 2 migrations to schema `db` (execution time 00:00.153s)

数据库中flyway记录历史信息表如下:

如果以上效果您已实现,那么恭喜您已经get到Flyway脚本管理器,good lucky!

数据库版本管理框架-Flyway相关推荐

  1. spring-cloud集成数据库版本迁移工具flyway

    spring-cloud集成数据库版本迁移工具flyway Flyway实现数据库版本同步有两种方式,一种就是直接导包,通过配置文件使用,还有一种就是自定义的方式. 一 .依赖+配置文件 1 flyw ...

  2. Flyway 数据库版本管理控制

    Flyway 数据库版本管理控制 Flyway 是一个用Java编写的开源数据库版本管理工具,或者说是数据库结构变更工具,主要用于帮助开发和运维更容易地管理数据库演进过程中的各个版本. Maven 所 ...

  3. Spring Boot 2.x基础教程:使用Flyway管理数据库版本

    之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的 JdbcTemplate(https://blog.didispace.com/spring-b ...

  4. Spring Boot中使用Flyway来管理数据库版本

    久违了的Spring Boot系列,今天抽空更新一篇.之前写过很多篇关于数据访问的文章了,比如下面这些: 使用JdbcTemplate 使用Spring-data-jpa简化数据访问层(推荐) 多数据 ...

  5. flyway常用配置_Spring Boot 2.x基础教程:使用Flyway管理数据库版本

    之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate.Spring Data JPA以及我们国内最常用的MyBatis.同时, ...

  6. Maven学习总结(33)——开发人员如何使用 Flyway 插件管理数据库版本

    一.前言. 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(开发.测试.维护人员)能够讲清楚当前环境下的数据库是哪个版本,与哪个版本的 ...

  7. flyway版本号_使用flyway作为数据库版本工具

    1. 在maven中添加jar包. org.flywaydb flyway-core 5.2.4 2.在classpath目录中添加文件夹 db.migration --文件名称是可以改变 3.在配置 ...

  8. Spring Boot教程(四十)使用Flyway来管理数据库版本

    在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作.在实现这个例子的时候,我们事先在MySQL中创建了用户表.创建表的过程我们在实 ...

  9. flyway版本号_Flyway 管理数据库版本变更

    logo 一. Flyway介绍 Flyway的定位:数据库的版本控制. Flyway是一款开源的数据库版本管理工具,Flyway可以独立于应用实现管理并跟踪数据库的变更(DDL和DML语句),Fly ...

  10. flyway版本号_数据库版本管理工具-flyway

    flyway产生背景 在日常开发中,经常遇到数据库变更,字段增减调整,需要维护多个不同数据库时是十分痛苦的事情.代码可以使用svn,git等工具进行管理,那么数据库的版本可以使用Flyway 一款小工 ...

最新文章

  1. 新时代的网络工程师需要掌握哪些技能
  2. MongoDB3.6.3 windows安装配置、启动
  3. 设计一个shell程序,在/userdata目录下建立50个目录,并对每个目录给754权限!
  4. mysql数据库运行远程用户访问不了_MySQL数据库远程访问权限如何打开(两种方法)...
  5. 吴恩达登录知乎,亲自回答如何系统学习机器学习
  6. OpenWrt——Could not lock /var/lock/opkg.lock: Resource temporarily unavailable.
  7. 江西省能源局发布第一、二批省级光伏度电补贴目录
  8. FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解...
  9. 脚本语言php是什么意思,php是什么脚本语言
  10. Super-palindrome【字符串+思维】
  11. 从数据角度看,每家公司只有2种角色:看看你更适合哪一种?
  12. Spring框架----Spring的环绕通知
  13. matlab已知xyz拟合标定map,matlab练习题
  14. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-2核心技术列表...
  15. 插帧补帧DAIN算法,让电影、视频、动漫变丝滑顺畅
  16. Datawhale组队学习周报(第045周)
  17. UDP 头部结构及协议特点
  18. 【欧拉猜想】是否有无穷多个不可约分的正整数解
  19. kafka之主题操作kafka-topics命令
  20. 连续分布——正态分布、卡方分布、t分布、F分布

热门文章

  1. android console服务,如何使能和关闭android设备上的console功能
  2. Nginx 局域网共享
  3. 《小鑫发现》之GraphQL框架Prisma
  4. Apache Calcite介绍
  5. java网络文章博客抓取系统_java 后端博客系统文章系统——No5
  6. 编译原理:什么是编译程序?
  7. 手机编程软件推荐(C/C++、JAVA篇)
  8. 服务器采集数据源码,Skywalking数据采集与收集源码分析
  9. 2022-03-25 Python作业1
  10. eclipse cdt 导入c ++ 工程并建立头头文件 索引