什么是Flyway

Flyway官方网站:点击这里

官方描述:

Flyway extends DevOps to your databases to accelerate software delivery and ensure quality code.

-- Flyway 将 DevOps 扩展到您的数据库,以加速软件交付并确保代码质量。

From version control to continuous delivery, Flyway builds on application delivery processes to automate database deployments.

-- 从版本控制到持续交付,Flyway 以应用程序交付流程为基础来自动化数据库部署。

Flyway是一个开源的数据库迁移工具,用于在应用程序的开发周期中管理和跟踪数据库的变化。

数据库迁移是指对数据库结构和数据进行变更的过程,包括创建表、修改表结构、添加数据等操作。在软件开发中,随着应用程序的不断演进和迭代,数据库的结构和数据也需要相应地进行调整和变更。Flyway帮助开发人员更好地管理这些变化,确保数据库与应用程序的版本保持一致。

与Spring集成

1. 引入依赖:

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

2. 于spring配置文件中开启flyway

spring:
flyway:
enabled: true

3. 管理sql脚本

目录

Spring项目中,flyway约定将sql脚本置于src/main/resources/db/migration目录下。

sql脚本命名方式

V<version>__<description>.sql

  • 脚本为版本号,可以为数字与小数点的合理组合

    • 如:1, 1.1.1.1.1
  • 为脚本描述信息,可自由填写

效果

db/migration目录下的多个sql脚本执行顺序为依照版本号由小到大执行

项目启动后,若原数据库为空,则按序自动执行全部脚本。

若向db/migration中添加版本号更大的脚本,则再次启动项目后,会执行新增脚本。

规范

  • 脚本版本不能相同
  • 已执行脚本不可变更或删除
  • 默认配置下,不能添加比已执行脚本版本低的脚本

原理

flyway自动在数据库中创建表flyway_schema_history

表内数据:

可以看到,字段包括:

  • 执行位次
  • 版本号
  • 描述信息
  • 脚本类型
  • 脚本名
  • checksum
  • 执行用户
  • 执行时间戳
  • 执行时长
  • 执行是否成功

每次spring项目启动时,flyway模块会做如下操作:

  1. 检查数据库连接
  2. 扫描指定位置(默认为db/migration)脚本并加载
  • 此时会检查文件的命名格式
  1. 检查flyway_schema_history表是否存在,不存在则创建
  2. 进行文件与元数据比对
  • flyway_schema_history中检索最大版本,大于此版本的脚本标记为未执行
  • 比对已执行脚本的checksum,确保未被修改
  1. 执行未执行脚本,每执行一条,就向flyway_schema_history中插入一条元数据

总结

本文简单记录了spring集成flyway的配置方法与使用方式,并阐述了flyway约定的一些规范,最后简单描述了flyway的工作原理。仅供入门参考。

【Flyway】初识Flyway,将Flyway集成于Spring项目的更多相关文章

  1. Spring项目集成ShiroFilter简单配置

    Shiros是我们开发中常用的用来实现权限控制的一种工具包,它主要有认证.授权.加密.会话管理.与Web集成.缓存等功能.我是从事javaweb工作的,我就经常遇到需要实现权限控制的项目,之前我们都是 ...

  2. Spring项目集成ShiroFilter简单实现权限管理

    Shiros是我们开发中常用的用来实现权限控制的一种工具包,它主要有认证.授权.加密.会话管理.与Web集成.缓存等功能.我是从事javaweb工作的,我就经常遇到需要实现权限控制的项目,之前我们都是 ...

  3. Flyway详解以及Springboot集成Flyway(转)

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...

  4. Spring Cloud集成相关优质项目推荐

    Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus 事件.消 ...

  5. 一键式Spring集成工具 Spring Boot

    最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的 比如拦截器:@As ...

  6. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  7. 不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用

    在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖 ...

  8. MyBatis集成到Spring时配置MapperScannerConfigurer出错

    问题描述 在web项目中同时集成了spring mvc和mybatis. 将jdbc配置参数独立在外部配置文件中,然后通过<context:property-placeholder>引入. ...

  9. MyEclipse的JPA实现集成EasyJF+Spring

    该视频是演示MyEclipse的JPA实现集成EasyJF+Spring的示例视频.演示项目很小,仅实现基本的查询功能. 演示过程中难免有误,请各位朋友热心指导! gh发给梵蒂冈地方fgh

  10. 集成Struts2+Spring+Hibernate_两种方案

    集成Struts2+Spring+Hibernate 第一种方案:让Spring创建Struts2的Action,不让Spring完全管理Struts2的Action      Struts2 Act ...

随机推荐

  1. oracle删除一张表后,索引,同义词,视图,约束会被删除么

    问题描述:看到有一道题,说删除一张表之后,什么会被关联删除 进行测试,看看一张表什么会被关联删除,进行scoot下的EMP进行测试 一.创建测试需求用例 表结构: SQL> desc emp; ...

  2. 3.2 构造器、this、包机制、访问修饰符、封装

    构造器 构造器:在实例化的一个对象的时候会给对象赋予初始值,因此我们可以通过修改构造器,来改变对象的初始值,构造器是完成对象的初始化,并不是创建对象 我们也可以创建多个构造器实现不同的初始化,即构造器 ...

  3. day05-优惠券秒杀01

    功能03-优惠券秒杀01 4.功能03-优惠券秒杀 4.1全局唯一ID 4.1.1全局ID生成器 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单,并保存到tb_voucher_order这张表 ...

  4. Sitecore10 Demo演示环境Azure一键部署(Step By Step Guide to installing Sitecore10 in Azure Paas)

    本文演示Sitecore XP Single(XP0)在Azure上的一键部署,即"30分钟生成Sitecore演示环境"的一环. 关于XP(即Sitecore Experienc ...

  5. 虚拟dom中key的作用以及用index作为key引发的问题

  6. 安装Nodejs,执行npm命令异常

    异常现象: 在安装完成Nodejs之后,使用npm install时提示异常: 使用cmd查看npm版本,也报同样的错误. "operation not permitted, mkdir ' ...

  7. 大话AI绘画技术原理与算法优化

    引子 博主很长一段时间都没有发文,确实是在忙一些技术研究. 如标题所示,本篇博文主要把近段时间的研究工作做一个review. 看过各种相关技术的公关文章,林林总总,水分很多. 也确实没有多少人能把一些 ...

  8. Android JetPack~LiveData(二) 数据倒灌问题

    Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发 Android  JetPack~ DataBinding(数据绑定)(一)    集成与使用 Android  J ...

  9. Prism Sample 14-UsingEventAggregator

    这次是事件聚合器的应用. 事件聚合器应用第一步:定义一个事件聚合器,应该是一个可访问的公共区域,例14为它做了一个core的项目.代码很简单: using Prism.Events; namespac ...

  10. 2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。

    2021-03-31:给定一个数组arr,给定一个值v.求子数组平均值小于等于v的最长子数组长度. 福大大 答案2021-03-31: 这道题是昨天每日一题的变种.数组每个元素减v,然后求<=0 ...