一、开发时管理数据库遇到的问题:
现在开发一般都是团队开发,这样就会出现项目同步的问题,代码同步可以通过SVN工具管理起来,那数据库同步怎么办呢?理想的情况下,在开发新项目的时候会首先把业务理清楚,把数据库表设计好,然后将数据库交给专门的人员维护,也就不存在数据库同步的问题了。但实际情况呢?需求从项目开始到项目结束一直在变,很多公司就没有专门的数据库维护人员,数据库大家都在操作,都在修改,如果团队之间沟通及时还好,大家每次更新代码后顺便也更新一下数据库,如果沟通不及时,呵呵(大家自行脑补)。。。这样数据库不同步的问题就凸显出来了。
二、Flyway 的简单介绍:
1、概念:
Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像SVN管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。
2、支持的数据库类型:
Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix。
3、sql脚本的命名规范:
V+版本号(版本号的数字间以"."或"_"分隔开)+双下划线(用来分隔版本号和描述)+文件描述+后缀名,例如:V2017.9.30__Update.sql。
注:版本号不能相同!
4、Flyway读取sql脚本的默认位置:
项目的源文件夹下的db/migration目录。
5、指令:
一共就6个基本指令:migrate、clean、info、validate、baseline、repair。
三、Flyway 的优势:
1、不仅支持sql 脚本,还支持Java 代码直接操作数据库(flyway-core-x.x.x.jar);
2、有Maven 插件;
3、支持命令行;
4、与Spring 框结合,很方便地实现应用启动时自动检查并升级数据库的功能。
四、Flyway命令行工具的使用:
1、解压下载flyway-commandlin 版本并解压到本地,结构图如下:

2、将sql脚本放在Flyway默认的db/migration目录下,如果放在其他位置需要修改conf/flyway.conf文件中的flyway.locations。
3、根据自己的情况修改conf/flyway.conf文件中的flyway.url、flyway.user、flyway.password。
4、在命令行执行migrate命令。
五、与Maven项目结合使用:
1、引入依赖坐标:
1 2 3 4 5 6 | <!-- flyway -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version> 4.2 . 0 </version>
<dependency>
|
2、在src/main/resources目录下建立存放sql版本文件的路径dataBase/sqlite(也可以写默认路径db/migration),并将sql文件放在下面。