简介

在团队开发当中,有可能每个人都是使用自己本地的数据库。当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新。

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.ymlapplication.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/migrationclasspath对应的目录就是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 = trueclean-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/

如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您

最新文章

  1. jQuery介绍 DOM对象和jQuery对象的转换与区别
  2. spring boot 自动部署方案
  3. The 2015 China Collegiate Programming Contest G. Ancient Go hdu 5546
  4. oc-基本语法
  5. hdu Waiting ten thousand years for Love
  6. 设置用户ID和设置组ID
  7. UVALive 6609 Minimal Subarray Length (查找+构建排序数组)
  8. python-os.walk目录递归
  9. Html5的&lt;button&gt;标签
  10. __declspec,__cdecl,__stdcall都是什么意思?有什么作用?
  11. 深度神经网络(DNN)损失函数和激活函数的选择
  12. c++趣味之shared_ptr额外好处
  13. 【SYZOI Round1】滑稽的树
  14. bzoj 4318 OSU 概率期望dp
  15. Python 的第一个小程序
  16. MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
  17. 软件工程(GZSD2015)学生博客列表
  18. node.js 简单的获取命令参数
  19. maven nexus deploy方式以及相关注意事项(增加eclipse执行maven deploy)
  20. Centos之链接命令

热门文章

  1. ActiveMQ 持久订阅者,执行结果与初衷相违背,验证离线订阅者无效,问题解决
  2. Linux 通过终端命令行切换系统语言
  3. 为什么PUSH推送要经常背锅?
  4. MySQL 主从复制原理及过程讲解
  5. [hdu3308]线段树
  6. 浅析常见的 Web 安全预防
  7. Linux常用命令~新手必知
  8. Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
  9. Spring Cloud Alibaba入门实战之nacos(一)
  10. 3.4 Go字符型