官方网站:
https://flywaydb.org/getstarted/
基本概念
一、为什么要使用DB migration tools
我们可以想象,多位开发人员,多个数据库环境。
偶尔就出现:哎呀!集成环境的数据库忘记更新了。
二、script 目录
flyway执行时,默认读取的目录是classpath:/db/migration
我们项目中就放在/resource/db/migration
三、该文件名由
* prefix: default: V (大写哦)
* version: 版本号,也可以使用大小版本组合的方式,小版本号用单_区分
* separator: 分隔符,双下划线__
* description: 描述(你懂得,必须要有意义)
* suffix: 后缀 default: .sql
四、Instruction - Use in Current Project
那么如何在已经开发了一段时间的项目中使用Flyway呢?
1.Maven配置
<dependencies>中加上
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.0.3</version>
</dependency>
<build>中加上
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>4.0.3</version>
</plugin>
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