使用flyway对应用的数据库版本控制

官方网站:

https://flywaydb.org/getstarted/

基本概念

一、为什么要使用DB migration tools

我们可以想象,多位开发人员,多个数据库环境。
偶尔就出现:哎呀!集成环境的数据库忘记更新了。

二、script 目录

使用flyway对应用的数据库版本控制_第1张图片

flyway执行时,默认读取的目录是classpath:/db/migration
我们项目中就放在/resource/db/migration

三、该文件名由                                                                         

使用flyway对应用的数据库版本控制_第2张图片
* prefix: default: V (大写哦)
* version: 版本号,也可以使用大小版本组合的方式,小版本号用单_区分 
* separator: 分隔符,双下划线__ 
* description: 描述(你懂得,必须要有意义) 
* suffix: 后缀 default: .sql


四、Instruction - Use in Current Project

那么如何在已经开发了一段时间的项目中使用Flyway呢?

1.Maven配置

中加上

org.flywaydb

flyway-core

4.0.3

中加上

    org.flywaydb

flyway-maven-plugin
    4.0.3

2.application.properties配置

flyway.baselineOnMigrate=true

如果是application.yml,则为

flyway.baselineOnMigrate: true

3.在resources/db/migration中添加V1__XXX.sql,mvn compile(运行Application)即可看到SQL脚本运行结果。(注意V1后面是两个下划线)

 

注意

在启动tomcat启动后 加载配置文件运行flyway组件 对数据库版本更新,它在维护更新时会在数据库中新建表 schame_version 用来对sql脚本版本升级进行维护,一份sql文件对应一条数据,所以对数据库版本升级时,会根据该表查询进行操作,如果没有记录,则会执行该sql文件,如果存在数据则不执行,在对当前数据库中sql脚本只会执行一次,

1.出现错误的解决方法:

如果出现异常例如:org.flywaydb.core.api.FlywayException: Schema “xxx” contains a failed migration to version 1.1.043 !则表示数据库冲突,需要把表 schame_version 相应记录删除,并且保证sql脚本操作不会与该数据库冲突。每次版本更新 schame_version 都会保存运行的结果。

如果你的SQL脚本运行失败,到schema_version表中删除最新一条数据,

比如我故意写一个错误的SQL语句到V2__demo2.sql,运行mvn compile(运行Application)。

 

可以看到最新一条的success列为false。

如果部分成功了,要手动rollback,修改SQL脚本正确后再次mvn compile(运行Application)。

 

文章参考自:

https://www.cnblogs.com/dreamingodd/p/6125435.html

http://liuxing87327.iteye.com/blog/2174567

你可能感兴趣的:(数据库)