【Flyway】初识Flyway,将Flyway集成于Spring项目
什么是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模块会做如下操作:
- 检查数据库连接
- 扫描指定位置(默认为
db/migration)脚本并加载
- 此时会检查文件的命名格式
- 检查
flyway_schema_history表是否存在,不存在则创建 - 进行文件与元数据比对
- 从
flyway_schema_history中检索最大版本,大于此版本的脚本标记为未执行 - 比对已执行脚本的checksum,确保未被修改
- 执行未执行脚本,每执行一条,就向
flyway_schema_history中插入一条元数据
总结
本文简单记录了spring集成flyway的配置方法与使用方式,并阐述了flyway约定的一些规范,最后简单描述了flyway的工作原理。仅供入门参考。
【Flyway】初识Flyway,将Flyway集成于Spring项目的更多相关文章
- Spring项目集成ShiroFilter简单配置
Shiros是我们开发中常用的用来实现权限控制的一种工具包,它主要有认证.授权.加密.会话管理.与Web集成.缓存等功能.我是从事javaweb工作的,我就经常遇到需要实现权限控制的项目,之前我们都是 ...
- Spring项目集成ShiroFilter简单实现权限管理
Shiros是我们开发中常用的用来实现权限控制的一种工具包,它主要有认证.授权.加密.会话管理.与Web集成.缓存等功能.我是从事javaweb工作的,我就经常遇到需要实现权限控制的项目,之前我们都是 ...
- Flyway详解以及Springboot集成Flyway(转)
Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...
- Spring Cloud集成相关优质项目推荐
Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus 事件.消 ...
- 一键式Spring集成工具 Spring Boot
最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的 比如拦截器:@As ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- 不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用
在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖 ...
- MyBatis集成到Spring时配置MapperScannerConfigurer出错
问题描述 在web项目中同时集成了spring mvc和mybatis. 将jdbc配置参数独立在外部配置文件中,然后通过<context:property-placeholder>引入. ...
- MyEclipse的JPA实现集成EasyJF+Spring
该视频是演示MyEclipse的JPA实现集成EasyJF+Spring的示例视频.演示项目很小,仅实现基本的查询功能. 演示过程中难免有误,请各位朋友热心指导! gh发给梵蒂冈地方fgh
- 集成Struts2+Spring+Hibernate_两种方案
集成Struts2+Spring+Hibernate 第一种方案:让Spring创建Struts2的Action,不让Spring完全管理Struts2的Action Struts2 Act ...
随机推荐
- PHP利用 JSON 将XML转换为数组
在很多开发项目中,我们都会遇到将XML文件转换为数组使用,因此在本篇 PHP教程 中,UncleToo和大家一起学习 如何转换XML为数组 . 现在有一个uncletoo.xml的配置文件,格式如下: ...
- mysql+proxysql+replication-manager的主从半同步复制+高可用+读写分离
环境: AlmaLinux release 9.1 MySQL Community Server Ver 8.0.33 Replication Manager v2.2.40 for MariaDB ...
- Ldap同步过滤问题
https://docs.oracle.com/cd/E26217_01/E35191/html/ldap-filters-attrs-users.html
- java生成机器码
java根据系统参数生成每个计算机的唯一标识. 1. 获取CPU序列号 /** * 获取CPU序列号 * @return * @throws IOException */ public static ...
- 笔记五:进程间的通信(IPC通信之共享内存)
IPC通信 IPC通信(Inter-Process Communication) 三种: 共享内存.消息队列.信号灯 这个IPC对象,肯定是存在于内核中.而且用户空间的文件系统中有没有IPC的文件类型 ...
- Ajax 以及 Ajax基于Promise封装
AJAX - 创建 XMLHttpRequest 对象 var xmlhttp = new XMLHttpRequest(); 通过打印实例对象我们发现,我们打印的是 xmlhttp 对象,里面所有的 ...
- ArcGIS Desktop发布地形高程服务(DEM/DSM)
在做ArcGIS三维时,地形服务的发布与普通地图服务的发布不一样,需要发布成ImageServer,切片格式选择LERC. 本文示例使用软件: ArcGIS Desktop10.3.1 注:ArcGI ...
- Pwn系列之Protostar靶场 Stack3题解
(gdb) disass main Dump of assembler code for function main: 0x08048438 <main+0>: push ebp 0x08 ...
- ATL创建的ActiveX实现JS回调
最近公司的产品需要使用ActiveX文件上传.讨论了基本所有的技术,最后还是决定C++搞个ActiveX...但上传的回调费了半天劲,才搞定.代码如下 STDMETHODIMP CFileSelect ...
- PaddlePaddle 自动求导
自动求导 在 PaddlePaddle 中使用自动求导来计算导数. 要求:$ f(x)=\sin{x} $,绘制 \(f(x)\) 和 \(\dfrac{\mathrm{d}f(x)}{\mathrm ...