Flyway是一个开源的数据库版本管理工具,而且极力主张“约定大于配置”,简单、专一、强大。可使用SQL完成数据同步,或者基于特定数据库的语法(例如PL / SQL,T-SQL等)或Java代码(适用于高级数据转换或处理LOB)的方式编写。而且数据库支持很是普遍:git
那么,咱们首先解释一下什么是数据库版本管理?程序员
举个简单的例子:spring
那么问题就来了:咱们如何保证数据库schema的状态一致?某一个开发人员修改了开发库,新增了一个字段,如何可以有效的同步到测试库,测试经过以后如何有效的同步到演示库和生产库?在没有Flyway以前,这个动做一般是由上线程序员本身去执行SQL来完成的,或者比较正规的公司专门有版本管理人员去操做。这种方式一般存在几个问题:sql
这也就是咱们学习Flyway的目的:Flyway可以自动的帮助咱们有效的同步各个发布数据库之间的状态,无论你是加了或者删了一个字段,仍是新加了一张表,他都能自动化的跟随项目的发布同时发布。docker
首先,咱们为SpringBoot项目添加Flyway依赖数据库
<dependency> <groupid>org.flywaydb</groupid> <artifactid>flyway-core</artifactid> <version>6.0.7</version> </dependency>
而后咱们要保证数据库里面有spring.datasource的数据源配置。而且在application.properties中添加以下的配置安全
spring: flyway: enabled: true #启用flyway encoding: utf-8 #字符编码 locations: ["classpath:db/migration"] #版本控制文件存放目录
而后在resources/db/migration目录下面,加入以下格式的脚本:springboot
V1.1__create_table.sql V1.2__update_person_table.sql V1.3__create_new_table.sql V1.4__add_person_comment.sql V2.1__modify_person_data.sql
大写V后面紧跟数据库脚本的版本号(递增形式、不能重复),而后两个下划线,以后是对脚本内容进行描述。如:V1.1__create_table.sql是用于建立表结构的数据库脚本,内容是create table之类的DDL。 第二个脚本是对数据库中person表进行了更新。总之脚本里面的内容,就是你但愿对spring.datasource表明的数据库进行的操做,能够是表的建立、删除、修改,也能够是对数据的建立删除修改。app
> 固然,我我的不建议将DML-SQL写入脚本,也就是不要在这个脚本里面写insert、update、delete。以避免不注意的状况下,形成生产数据的误操做。若是大家公司在生产上线管理方面没有严格的审核程序,在生产环境下,就干脆不要使用flyway,方便开发是一方面,生产安全更为重要!maven
最后,启动SpringBoot项目,在该目标库范围内没有执行过的SQL脚本被执行。并将脚本执行信息保存在数据库的schema_version_history数据表里面。