一 Flyway是什么
Flyway是独立于数据库的应用、管理并跟踪数据库变更的使用Java编写的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。
官网 Redgate Flyway - Automate database deployments across teams and technologies
二 Flyway使用场景
开发人员在合作的时候经常遇到以下场景:
场景一:开发环境,多人共用一套数据库
开发正调试着,忽然代码报错“XX字段不存在”:谁TMD又把表结构给改了……
场景二:开发环境,每个人各自搭建自己的数据库
开发完一个功能,提交代码、更新,重启准备调试下,代码报错“XX表不存在”
吼一嗓子:谁又改表结构了?什么?每个人都要把xxx.sql执行一遍?
……
新员工:我要搭一套开发数据库,到底应该执行哪些SQL脚本?
场景三:开发转测试
测试:你看这个功能是不是有个Bug?
开发1:哦,你要执行一下这个SQL脚本。
测试:嗯,现在没问题了,但是怎么保证这个脚本没有Bug,我能再重现、测试一遍吗?
开发:额~,你重新搭一遍数据库吧……
场景四:搭建一套演示环境
执行SQL脚本1、SQL脚本2、SQL脚本3……启动服务失败!
什么?这个脚本N是测试版本的,war包是已经上线的版本?
删库再来一遍……
传统的解决方案就是在一个固定的文件夹中,将需要跑的SQL脚本放在里面。开发人员在合作的时候,A修改了数据库,在B遇到问题的时候,可能需要交流沟通一下,去跑需要的脚本。在项目上线的过程中,也是运维人员在规定的文件夹中,找到需要跑的SQL脚本。运行它们。
lyway等migration工具就是要把开发人员和运维人员从以上这些场景的繁琐工作中解放出来,如果使用maven的话,那么在项目编译(SpringBoot运行Application)的时候,SQL数据库的改动就自动进入数据库,只要启动成功,开发或者运维人员对SQL数据库的migrate过程是无感知的,项目依然可以照常运行。
三 Flyway命名规范
sql 脚本存放目录:src/main/resources/db/migration
Flyway 将 SQL 文件分为 Versioned 、Repeatable 和 Undo 三种:
Versioned 用于版本升级, 每个版本有唯一的版本号并只能执行一次.
Repeatable 可重复执行, 当 Flyway检测到 Repeatable 类型的 SQL 脚本的 checksum 有变动, Flyway 就会重新应用该脚本. 它并不用于版本更新, 这类的 migration 总是在 Versioned 执行之后才被执行。
Undo 用于撤销具有相同版本的版本化迁移带来的影响。每个undo文件对应一个Version文件。
说明:V大写,中间是两个下划线(__)

四 Flyway使用入门
Maven插件,运行命令方式集成flyway
Quickstart - Maven - Redgate Flyway - Product Documentation
Springboot集成flyway
Spring Boot 集成 Flyway,数据库也能做版本控制,太牛逼了! - Java技术栈 - 博客园
注意:需要导入spring-boot-starter-jdbc 才能自动引入flyway自动配置。
Spring Boot 默认提供了对 Flyway 的自动配置:
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
开发好习惯:
1)只增量添加脚本,不去修改意见存在的脚本。(多人并行开发,你修改了别人就起不来了)
2)创建表前,先drop table。最坏情况下,仅仅truncae flyway_schema_history就可以自动起来了。
参考文章:
数据库版本控制工具Flyway入门指南
552

被折叠的 条评论
为什么被折叠?



