什么是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. 33-webpack详细配置output

    const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') module. ...

  2. 基于django+ansible+webssh运维自动化管理系统

    基于django+ansible+webssh运维自动化管理系统   前言 最初开发这个基于Django ansible运维自动化管理系统的想法其实从大学时候就已经有了,但是苦于技术原因和没有线上环境 ...

  3. 深度学习-08(PaddlePaddle文本分类)

    深度学习-08(PaddlePaddle文本分类) 文章目录 深度学习-08(PaddlePaddle文本分类) NLP概述 NLP基本概念 什么是NLP NLP的主要任务 传统NLP方法 传统NLP ...

  4. Java代码读取properties配置文件

    读取properties配置文件 package com.easycrud.utils; import java.io.IOException; import java.io.InputStream; ...

  5. 前端模拟“多线程”提交Http请求

    首先说,javascript没有多线程这样一个说法,我说的只是类似那种效果.其次,不建议使用这种方式解决问题,多线程应该交给后台去做. 但是,如果非要这样用,有什么方法呢? 我在工作中就遇到了这样的问 ...

  6. Hardhat 开发框架 - Solidity开发教程连载

    Decert.me 要连载教程了, <Solidity 开发教程> 力求系统.深入的介绍 Solidity 开发, 同时这是一套交互式教程,你可以实时的修改教程里的合约代码并运行. 本教程 ...

  7. 《 Istio 权威指南 》新著重磅发行!华为云云原生团队匠心力作

    摘要:由 Istio社区指导委员会成员和华为云云原生团队联合编著的云原生服务网格书籍< Istio 权威指南>重磅上市 本文分享自华为云社区<< Istio 权威指南 > ...

  8. 2022-12-19:大的国家。如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 250000

    2022-12-19:大的国家.如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 250000 ...

  9. 2020-10-13:hash与B+tree的区别?

    福哥答案2020-10-13: [答案来自知乎:](https://www.zhihu.com/question/425378511/answer/1522000015) 这里我从数据库索引的层面回答 ...

  10. 2021-10-24:快乐数。编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是

    2021-10-24:快乐数.编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和.然后重复这个过程直到这个数变为 1,也可能是 ...