flyway简单入门【SpringBoo整合flyway】

flyway简单入门

flyway是一款数据库版本管理工具

1. 工作原理

flyway通过历史记录表(flyway_schema_history)来记录版本历史。每次随项目启动时将会自动扫描在resources/db/migration下的文件,并查询flyway_schema_history判断是否为新增文件?

  • 如果是新增的文件,则执行该迁移文件
  • 如果不是,则忽略该文件

flyway_schema_history的表结构:

create table flyway_schema_history
(
    installed_rank int                                 not null
        primary key,
    version        varchar(50)                         null,
    description    varchar(200)                        not null,
    type           varchar(20)                         not null,
    script         varchar(1000)                       not null,
    checksum       int                                 null,
    installed_by   varchar(100)                        not null,
    installed_on   timestamp default CURRENT_TIMESTAMP not null,
    execution_time int                                 not null,
    success        tinyint(1)                          not null
);

create index flyway_schema_history_s_idx
    on flyway_schema_history (success);

2. SpringBoot整合flyway

再多的讲解不如快速上手使用能让人赏心悦目,这里通过SpringBoot整合flyway来进行数据库版本的控制使用:

第一步:使用Spring初始化创建项目flyway_demo

pom.xml文件添加数据库连接和fly依赖:

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

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>

<!--大坑:jdbc的依赖,不然项目启动flyway没有任何效果,但是也不报错!!!-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

此时,在/src/main/resources路径下会增加db/migration目录

在这里插入图片描述

注意:

src/resources下的db/migration目录,在其中创建对应的SQL文件,其中又分为不同的文件类型,基于约定由于配置的原则,通过文件命名方式进行区分

  • 版本迁移以V开头,只会执行一次;
  • 回退迁移以U开头,一般不使用;
  • 可重复执行迁移以R开头,每次修改后都会重新执行
第二步:application.yml中添加相关配置
server:
  port: 10002
spring:
  flyway:
    enabled: true # 开启flyway
    clean-disabled: true # 禁止清理数据表
    table: flyway_schema_history # 版本控制信息表名,默认为flyway_schema_history
    out-of-order: false # 是否允许不按顺序迁移
    baseline-on-migrate: true # 如果数据库不是空表,需要设置为true,否则启动报错
    baseline-version: 1 # 和baseline-on-migrate搭配使用,小于此版本的不执行
    # schemas: 不设置使用默认Spring连接数据的地址和数据库
    validate-on-migrate: true # 执行迁移时是否自动调用验证
    locations: classpath:db/migration
	# 配置数据库,flyway那边就无需再进行数据的配置了
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true
    username: root
    password: root
  application:
    name: flyway_demo
第三步:在db/migration目录下创建sql脚本

V1_1.sql:

CREATE TABLE if NOT EXISTS `test_user` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
    `name` varchar(128) NOT NULL COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

此时启动项目,第一次会为我们在对应数据库创建flyway_schema_history,同时扫描sql脚本,进行sql执行,同时将执行记录历史保存到该表中。每次项目启动时就会进行重新扫描,将新增的sql脚本进行对应的执行,并进行记录,达到控制管理效果。

在这里插入图片描述

此时我们再定义sql脚本V1_2,再启动项目时,就会发现V1_2配置的内容也同步到flyway_schema_history中,同时为我们创建表:

在这里插入图片描述

补充:

我们可以安装对应的flyway-plugin插件进行flyway的手动管理,配置过程如下所示:

方式1:在settings-plugins中搜索并安装Flyway Migration Creation插件,此时点击Idea窗口左上角的File-New就会出现对应的插件

在这里插入图片描述

方式2:在pom文件中添加对应的plugin:

<build>
  <plugins>
    <!--注意:数据库用户标签为user,而非username-->
    <plugin>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <configuration>
        <driver>com.mysql.cj.jdbc.Driver</driver>
        <url>jdbc:mysql://localhost:3306/test?useUnicode=true</url>
        <user>root</user>
        <password>root</password>
      </configuration>
    </plugin>
  </plugins>
</build>

添加以后刷新maven,此时在Plugins中会出现对应的flyway:

在这里插入图片描述

flyway总共存在以下几种命令:

  • baseline:根据现有数据库结构生成一个基准迁移脚本
  • clean:删除所有创建的数据库对象,包括用户,表,视图等等
  • info:获取目前数据库的状态信息
  • migrate:对数据库依次应用版本更改
  • repair:修复命令尽量不要使用
  • undo:
  • validate:验证已Apply的脚本是否有变更,flyway的migration默认会先做validate

注:同时,flyway也支持pojo类到数据库表的自动创建操作!!!有兴趣的可以进flyway官网进行查看https://flywaydb.org/documentation/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值