flyway控制数据库版本,数据库迁移(在Spring Boot中的使用)

flyway是一款开源的数据库迁移工具,通过文件配置使得其非常的简单和方便。

这是Flyway官方文档的简介。每次项目上线数据库sql脚本都要人为手动去执行,这会让上线变得极其繁琐,而且手动操作也比较不可靠。手动执行了错误的sql脚本有时候还得收到去回滚。在此背景之下,我决定用自动化的方式去执行数据库脚本。在经过调研之后,我决定使用flyway这款数据库迁移工具。

为什么选择这款工具类?

  1. 这款工具几乎支持市面上所有的结构化数据语言,Oracle、Mysql、SQL Server、PostgreSQL等等。
  2. 这款工具涵盖七种命令:Migrate, Clean, Info, Validate, Undo, Baseline and Repair能适用大部分数据库操作的场景。
  3. 这款工具支持Java API调用、Maven plugin 、Gradle plugin这三种方式来使用工具。而且工具还支持很多插件,用Java开发Web应用使用的最多的就是Spring容器,这款工具也很好的兼容Spring Boot。

ps:如果你的应用是基于JVM的,官方文档推荐使用Java API调用的方式来使用Flyway。

好了,介绍了这么多,我们接下来具体介绍如何使用Flyway吧。

Flyway在项目中的使用:

  1. 我的项目是使用maven来构建的,首先我们需要依赖flyway-core核心包,在这里我引用的是5.2.4版本的包。(ps:项目中我们使用的数据库是Oracle 11,在这里flyway目前的社区版是不支持Oracle 11数据库的,我在后面会教大家如何解决这个问题,先在这里埋个坑)

		<dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <version>5.2.4</version>
        </dependency>

  1. 依赖好fly-way核心包之后,就只需要在Spring Boot的配置文件中配置好对应的fly-way配置。
spring:
	flyway:
	baselineOnMigrate: true
    baselineVersion: 1
    user: user
	password: password
	locations: classpath:dbs
	validateOnMigrate: false

在这里插入图片描述

  1. 在规定的目录下创建sql执行脚本,如下图所示。ps:这里需要特别注意的是V2.5后面是两个下划线__而不是一个下划线_。如果此处命名只有一个下划线,启动项目的时候flyway会报错提示格式错误。

在这里插入图片描述

将所有的配置和脚本准备好之后,运行项目后,数据库就会执行脚本里的sql语句。这个工具使用起来还是蛮简单的。

不过。。。不过你使用的是Oracle 11数据库的话(还记得前面挖的坑吗?),按照之前的配置和脚本运行项目的话,你的项目大概率是会抛异常,异常提示flyway不支持12版本以下的Oracle数据库的支持。我在网上搜了下这儿有三个方案可以解决此问题:

  • 使用flyway企业版本(也就是要打钱,打钱,打钱)

  • 升级Oracle数据库版本,升级成Oracle12版本(如果你所有的项目都是在使用Oracle 11,现在因为flyway升级成12,这可能也不太现实)

  • 降级你的flyway版本,使用远古版本(可能会与SpringBoot不兼容)

那要怎么办好呢?
这没啥好怕的,就一个字,干。撸代码。其实把flyway的源代码下载下来。把flyway里关于数据库版本的限制去掉就可以快乐的玩耍了。
具体的就是把源码里OracleDataBase类里方法ensureSupported()方法抛出的异常去掉,把DataBase类里的ensureDatabaseIsCompatibleWithFlywayEdition方法中抛出的异常注释掉。然后打好包,项目中依赖自己打的包。
改完这些运行你的Sping项目,一切就OK了。

如果你不想自己去改代码,可以直接在以下地址中下载源代码然后编译打包。
github地址:https://github.com/ryanzhuyuzhao/flyway-edit.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值