Flyway的简单介绍及使用详解

 更新时间:2020年07月25日 11:30:03   作者:木西 - Muxy  
这篇文章主要介绍了Flyway的简单介绍及使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、开发时管理数据库遇到的问题:

现在开发一般都是团队开发,这样就会出现项目同步的问题,代码同步可以通过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、引入依赖坐标:

<!-- 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文件放在下面。

3、增加flyway的java类:

package com.xxxxxx.flyway;
 
 import javax.sql.DataSource;
 import org.flywaydb.core.Flyway;
 
 public class MigrationSqlite {
 
 private DataSource dataSource;
 
 public void setDataSource(DataSource dataSource) {
 this.dataSource = dataSource;
 }
 
 public void migrate() {
 //初始化flyway类
 Flyway flyway = new Flyway();
 //设置加载数据库的相关配置信息
 flyway.setDataSource(dataSource);
 //设置存放flyway metadata数据的表名,默认"schema_version",可不写
 flyway.setTable("SCHMA_VERSION");
 //设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写
 flyway.setLocations("dataBase/sqlite");
 //设置sql脚本文件的编码,默认"UTF-8",可不写
 flyway.setEncoding("UTF-8");
 
 flyway.migrate();
 }
 }

4、在spring中实例化第3步的java类:

<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate">
 <property name="dataSource" ref="dataSource"></property>
 </bean>

从上面的bean 定义中我们可以看到,我们为flywayMigration 这个bean 实例注入了一个数据源,Flyway 的所有操作将针对这个数据源进行;同时我们通过init-method 属性指定了Spring 在实例化该bean 以后,主动执行该bean 的migrate 方法,而该方法内会执行Flyway 更新数据库的操作。至此,我们达到了在应用启动时,Spring 实例化上下文的时候,在Spring 实例化flywayMigration 这个bean 的时候,自动执行Flyway 更新数据库的操作。

5、处理Flyway 更新数据库和代码逻辑操作数据库时的冲突(自己目前没遇到,网上找到的,先留着备不时之需):

如果Flyway 还在更新数据库,没有完成更新操作之前,应用程序的其他逻辑已经开始使用数据库进行其他操作了,会导致应用程序产生很多bug ,甚至根本运行不起来。要解决这个问题,我们可以利用Spring 的bean 依赖原理,让关键的数据库操作bean 依赖于flywayMigration 这个bean ,达到在flywayMigration 没有实例化完成(数据库更新操作完成)之前,不能进行任何其他数据库相关操作。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>

这样,每次启动项目时就会自动更新数据库,不必在为数据库不同步烦恼了。

参考文章:

1、https://flywaydb.org/documentation/ (官网)

2、http://casheen.iteye.com/blog/1749916

3、http://shuzheng5201314.iteye.com/blog/2044517

4、https://www.jb51.net/article/191708.htm

到此这篇关于Flyway的简单介绍及使用的文章就介绍到这了,更多相关Flyway的简单介绍及使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VSCode远程XHR failed无法连接的问题及解决方案

    VSCode远程XHR failed无法连接的问题及解决方案

    VSCode进行远程连接时会检查服务端的Server运行情况,如未运行则需要下载安装,在下载过程中可能需要访问外网,如果外网不通则连接过程失败,解决方法是手动下载离线安装包,手动解压至指定的路径即可,对VSCode远程无法连接问题感兴趣的朋友一起看看吧
    2024-03-03
  • 关于数据处理包dplyr的函数用法总结

    关于数据处理包dplyr的函数用法总结

    下面小编就为大家带来一篇关于数据处理包dplyr的函数用法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • vscode添加GIT和SVN的方法示例

    vscode添加GIT和SVN的方法示例

    这篇文章主要介绍了vscode添加GIT和SVN的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 获取键盘键的值 集合 方便监控键盘事件

    获取键盘键的值 集合 方便监控键盘事件

    整理的比较全的键盘值的集合,以后大家在开发过程中,可以直接拿来判断。
    2009-08-08
  • BurpSuite超详细安装和基础使用教程(已破解)

    BurpSuite超详细安装和基础使用教程(已破解)

    Burp Suite 是用于攻击web 应用程序的集成平台包含了许多Burp工具,它主要用来做安全性渗透测试,可以实现拦截请求、Burp Spider爬虫、漏洞扫描(付费)等类似Fiddler和Postman但比其更强大的功能,今天给大家介绍下BurpSuite安装破解使用教程,感兴趣的朋友一起看看吧
    2022-10-10
  • SVN与Git版本控制的优缺点差异全面分析

    SVN与Git版本控制的优缺点差异全面分析

    这篇文章主要为大家介绍了SVN与Git版本控制的优缺点差异全面分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 最新Adobe2022 全家桶永久激活无限使用 附安装包下载(一键安装)

    最新Adobe2022 全家桶永久激活无限使用 附安装包下载(一键安装)

    众所周知,Adobe系列的软件每年都会更新一个大版本,这不,2022年还没到来,可Adobe2022已经更新了,所以最新版一出来,就有安装体验,整体效果非常不错,今天就把所有资源分享给大家
    2021-12-12
  • 关于最新IDEA2020.2.1,2.2,3以上破解,激活失效,重新激活的问题

    关于最新IDEA2020.2.1,2.2,3以上破解,激活失效,重新激活的问题

    今天很多朋友找小编说idea2020.2.3版本激活失效了,下面通过本文给大家分享了最新IDEA2020.2.1,2.2,2.3,idea.3以上破解,激活失效,重新激活的解决方法,需要的朋友参考下吧
    2020-10-10
  • selenium使用webdriver.Chrome()报错的问题解决办法

    selenium使用webdriver.Chrome()报错的问题解决办法

    这篇文章主要给大家介绍了关于selenium使用webdriver.Chrome()报错问题的解决办法,文中通过图文将解决的办法介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 使用 tke-autoscaling-placeholder 实现秒级弹性伸缩的方法

    使用 tke-autoscaling-placeholder 实现秒级弹性伸缩的方法

    这篇文章主要介绍了使用 tke-autoscaling-placeholder 实现秒级弹性伸缩的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论