Flyway:数据库版本迁移工具的介绍

Flyway:数据库版本迁移工具的介绍

本文转载自:https://www.cnblogs.com/ywjy/p/10959475.html 更详细的可以看原文

Flyway的工作模式

这一节主要介绍Flyway是如何工作的,也可以理解为flyway的数据库升级方案。

Flyway可以对数据库进行升级,从任意一个版本升级到最新的版本。但是升级的依据是用户自己编写的sql脚本,用户自己决定每一个版本的升级内容。

Flyway不限定脚本里面的内容,但是对脚本文件的名称有一定的要求:
版本号可以使用小版本,如V1.1。

具体要求:

版本号和版本描述之间,使用两个下划线分隔。
版本描述之间,使用一个下划线分隔单词。
版本号唯一:不允许多个脚本文件有相同的版本号。

使用Flyway升级,flyway会自动创建一张历史记录表:flyway_schema_history。
这张表记录了每一次升级的记录,包括已经执行了哪些脚本,脚本的文件名,内容校验和,执行的时间和结果:

flyway在升级数据库的时候,会检查已经执行过的版本对应的脚本是否发生变化,包括脚本文件名,以及脚本内容。如果flyway检测到发生了变化,则抛出错误,并终止升级。
如果已经执行过的脚本没有发生变化,flyway会跳过这些脚本,依次执行后续版本的脚本,并在记录表中插入对应的升级记录。
所以,flyway总是幂等的,而且可以支持跨版本的升级。
如果你好奇,flyway如何检查脚本文件的内容是否有修改。你可以注意以下记录表中有一个字段checksum,它记录了脚本文件的校验和。flyway通过比对文件的校验和来检测文件的内容是否变更。
使用上面的方式,升级一个空的数据库,或者在一直使用flyway升级方案的数据库上进行升级,都不会又问题。但是,如果在已有的数据库引入flyway,就需要一些额外的工作。
flyway检测数据库中是否有历史记录表,没有则代表是第一次升级。此时,flyway要求数据库是空的,并拒绝对数据库进行升级。

你可以设置baseline-on-migrate参数为true,flyway会自动将当前的数据库记录为V1版本,然后执行升级脚本。这也表示用户所准备的脚本中,V1版本的脚本会被跳过,只有V1之后的版本才会被执行。

以下内容介绍基于Spring-Boot + Maven的集成方案:

step1:在maven中引入flyway依赖

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

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
          ...
</dependencies>
...
flyway-core即为我们所说的API包,除此之外,还要引入postgresql驱动包和spring-boot-starter-jdbc。

step2:配置application
按照常规的方式,在application.yml文件中配置spring.datasource系列:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/test?currentSchema=demo_flyway
    driver-class-name: org.postgresql.Driver
    username: postgres
    password: postgres

spring为flyway准备了专属的数据源配置,但是在默认的情况下,可以直接使用spring.datasource的配置。

用户可以将脚本放在约定的位置:classpath:/db/migration,或者配置一个自定义的位置:

step3:在指定的目录编写脚本
如果用户没有特地设置脚本的位置,则应该在/db/migration创建脚本。否则,在对应的位置创建脚本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值