在SpringBoot中运用flyway举行数据库版本治理
2019-11-18杂谈搜奇网42°c
A+ A-本文纲要
- flyway是什么
- 能协助我们处置惩罚什么题目
- springboot环境下运用flyway
- flyway的事情道理
一、flyway是什么
Flyway是一个开源的数据库版本治理东西,而且尽力主意“商定大于设置”,简朴、专注、壮大。可以运用SQL完成数据同步,或许基于特定数据库的语法(比方PL / SQL,T-SQL等)或Java代码(适用于高等数据转换或处置惩罚LOB)的体式格局编写。而且数据库支撑异常普遍:
二、能协助我们处置惩罚什么题目
那末,我们起首解释一下什么是数据库版本治理?
- 人人都晓得git是协助软件项目举行代码版本的治理,轻易顺序员协同开辟
- 那末FlyWay就是数据库版本治理的东西,目标是保证多环境下数据库的状况一致性,轻易顺序员协同开辟
举个简朴的例子:
- 开辟职员一般运用同一个数据库或许自建库举行开辟事情,这个数据库一般叫做开辟库。
- 测试职员为了保证测试数据的有用性,一般自建一个库举行测试,这个数据库叫做测试库。
- 贩卖职员为了保证演示数据的结果,一般也须要一个零丁的数据库,这个数据库叫做演示库。
- 正式生产上线的库,供应用户运用,这个数据库叫做生产库。
那末题目就来了:我们怎样保证数据库schema的状况一致?某一个开辟职员修正了开辟库,新增了一个字段,怎样可以有用的同步到测试库,测试经由过程以后怎样有用的同步到演示库和生产库?在没有Flyway之前,这个行动一般是由上线顺序员本身去实行SQL来完成的,或许比较正规的公司特地有版本治理职员去操纵。这类体式格局一般存在几个题目:
- 开辟团队内部的沟通本钱增添,比方某一个成员修正了一个数据库字段,其他人能够都不晓得。
- 开辟团队和测试团队和其他团队之间的沟通本钱增添
- 没法完成自动化的延续集成,延续集成的历程代码可以经由过程git、maven、docker、k8s等东西来完成自动化的代码打包、布置。然则数据库的状况变化没有获得有用的自动变动,延续集成的历程的自动化就没法完成。
这也就是我们进修Flyway的目标:Flyway可以自动的协助我们有用的同步各个宣布数据库之间的状况,不论你是加了或许删了一个字段,照样新加了一张表,他都能自动化的追随项目标宣布同时宣布。
三、 springboot环境下运用flyway
起首,我们为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目次下面,到场以下花样的剧本:
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代表的数据库举行的操纵,可所以表的建立、删除、修正,也可所以对数据的建立删除修正。
固然,我个人不发起将DML-SQL写入剧本,也就是不要在这个剧本内里写insert、update、delete。以避免不注意的情况下,形成生产数据的误操纵。假如你们公司在生产上线治理方面没有严厉的考核顺序,在生产环境下,就痛快不要运用flyway,轻易开辟是一方面,生产平安更为重要!
末了,启动SpringBoot项目,在该目标库范围内没有实行过的SQL剧本被实行。并将剧本实行信息保留在数据库的schema_version_history数据表内里。
四、FlyWay的事情道理
- 起首项目启动flyway会去db/migration下面扫描文件,猎取文件名,并剖析版本号
然后去schema_version_history表内里找对应的版本实行信息,假如你的文件版本号大于数据库纪录版本,就实行剧本。不然就疏忽。
期待您的关注
- 博主近来新写了一本书:《手摸手教您进修SpringBoot系列-16章97节》
本文转载说明出处(必需带衔接,不能只转笔墨):字母哥博客。