SpringBoot整合Flyway(数据库版本迁移工具)
简介
在团队开发当中,有可能每个人都是使用自己本地的数据库。当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新。
Flyway数据库版本迁移工具,目的就是解决该问题而诞生的(我自己想的)。每当我们更新数据库的时候,只需要添加SQL文件到指定目录中。Flyway会在数据库创建一个表,专门记录已更新的SQL文件。当我们下次执行时则不会执行已记录并且执行成功的SQL文件。
整合
maven
现在的Flyway的最新版本已经到了6.4.2。我用的是6.3.3。
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.3.3</version>
</dependency>
application配置
搞定了Flyway的依赖后,修改一下SpringBoot的application.yml或application.xml配置。
spring:
flyway:
url: jdbc:mysql://192.168.138.132:3306/hotel-server?useUnicode=true&characterEncoding=UTF-8
user: johnson
password: 123456
table: flyway_schema_history
enabled: true
locations: classpath:db/migration
clean-disabled: false
flyway配置详解
url:连接数据库的Url 默认为spring.datasource.url
user:连接数据库的账号 默认为spring.datasource.username
password:连接数据库的密码 默认为spring.datasource.password
table:自定义数据库版本管理表 默认为 flyway_schema_history
enabled:是否开启 默认为开启
locations:SQL文件存放路径 默认 classpath:db/migration
SQL文件
上面的locations参数配置的SQL文件存放路径为 classpath:db/migration,classpath对应的目录就是resources目录,创建后的目录如下图:

SQL文件如上图,SQL文件名必须为V1.0.x__xxx.sql(注意:这里的下划线为两个_,我也是掉坑了才知道),这样可以对应SQL更新的版本号。启动了SpringBoot项目后,就会自动帮你执行SQL文件,可以看到数据库版本控制表中生成的数据:

clean操作
Flyway的clean操作:彻底清除已配置的架构,它将有效地为您提供一个全新的起点。所有对象(表,视图,过程等)都将被删除。
spring:
flyway:
clean-on-validation-error: true
clean-disabled: false
clean-on-validation-error:发生验证的错误时是否执行clean操作(如SQL执行失败),默认false,生产中必须使用false。
clean-disabled:是否禁用clean操作,默认false,生产中必须使用true
如果我们设置 clean-on-validation-error = true,clean-disabled = false。
当我们的SQL文件执行失败,在数据库版本控制表flyway_schema_history会添加一条失败的记录,success字段为0,此时并不会执行clean操作。
当把SQL文件修改正确并执行完后,此时flyway_schema_history会把失败记录的success字段由0改为1。并且会执行clean操作!!!!!整个数据库的表里面的数据都被清空了!(除非你在SQL文件中添加了insert操作)
其实在开发环境我也是不建议使用clean,毕竟填数据也是要时间的。。。
总结
团队开发当中的必备工具啊!不过生产环境当中记得把clean-disabled改为true
个人博客网址: https://colablog.cn/
如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您

SpringBoot整合Flyway(数据库版本迁移工具)的更多相关文章
- Flyway:数据库版本迁移工具的介绍
目录 Flyway介绍 Flyway的工作模式 Flyway的使用场景 命令行 使用Maven或Gradle插件 migrate clean info validate baseline Java A ...
- SpringBoot整合Sqlite数据库流程
1.创建项目 方式一: 通过网站https://start.spring.io/ 方式二: 通过开发工具(IDEA或者Eclipse自行百度) 2.修改pom.xml配置文件,添加必要的驱动包 < ...
- 三:Springboot整合Redis
一:springboot整合redis redis版本:3.0.0 运行环境:linux 1.安装redis 1.1安装gcc yum install gcc-c++ 1.2解压redis.3.0.0 ...
- MyBatis原理,Spring、SpringBoot整合MyBatis
1. MyBatis概述 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- 使用 Liquibase 管理数据库版本 - SpringBoot 2.7 .2 实战基础
优雅哥 SpringBoot 2.7 .2 实战基础 - 05 -使用 Liquibase 管理数据库版本 在企业开发中,数据库版本管理好像是一个伪命题,大多项目都是通过 Power Designer ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- 微服务架构 - SpringBoot整合Jooq和Flyway
在一次学习分布式跟踪系统zipkin中,发现了jooq这个组件,当时不知这个组件是干嘛的,后来抽空学习了一下,感觉这个组件还挺用的.它主要有以下作用: 通过DSL(Domain Specific La ...
- springboot整合mybatis连接mysql数据库出现SQLException异常
在springboot整合mybatis连接数据库的时候,项目中遇到一个SQLException,我检查了properties配置文件,看数据源有没有配错,检查有没有打错字,在数据库中把sql语句查询 ...
- Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存
一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...
随机推荐
- 剑指offer--(根据前序遍历和中序遍历)重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 201771010113 李婷华 《面向对象程序设计(java)》第十五周总结
一.理论知识部分 JAR文件 Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面程序就可以直接双击图标运行. .jar文件(Java归档)既可以包含类文件 ...
- SpringBatch异常To use the default BatchConfigurer the context must contain no more thanone DataSource
SpringBoot整合SpringBatch项目,已将代码开源至github,访问地址:https://github.com/cmlbeliever/SpringBatch 欢迎star or fo ...
- Springboot Mybatis 打包jar扫描bean与mapper问题研究与解决
SpringBootLean 是对springboot学习与研究项目,是根据实际项目的形式对进行配置与处理,欢迎star与fork. [oschina 地址] http://git.oschina.n ...
- Universalimageloader 原图片大小获取
Universalimageloader1.9.5上还没有对外提供获取图片的原大小功能,如果需要获取图片的源大小,可参考stackoverflow上的解决办法 stackoverflow地址 主要实现 ...
- throttle和debounce
遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件,如果不进行性能的优化,就可能会出现页面卡顿的现象,比如: 鼠标事件:mousemove(拖曳)/mouseover(划过)/mouseWhe ...
- 搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理
什么是跨域 跨域:一个域下的文档或脚本试图去请求另一个域下的资源 广义的跨域包含一下内容: 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源请求(内部的引用,脚本script,图片img,fr ...
- tpcc-mysql 试用
percona 出的一个mysql压力测试工具,至于tpcc的话,是一个衡量事务处理能力的一个值.具体可以看老外对他的定义. http://www.tpc.org/tpcc/results/tpcc_ ...
- hdu3397 Sequence operation 线段树
hdu3397 Sequence operation #include <bits/stdc++.h> using namespace std; ; struct node { /// l ...
- 基于Hdl Coder实现卡尔曼滤波算法
总所周知,FPGA极其不擅长复杂算法的运算,但是如果项目中又涉及一些高级算法的实现,在没有可封装IP核调用的形式下,我们应该如何进行程序开发呢?今夕已经是2020年,我们一味依赖于用verilog写代 ...