前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >02. Springboot集成Flyway

02. Springboot集成Flyway

作者头像
有一只柴犬
发布2024-01-25 11:11:47
1910
发布2024-01-25 11:11:47
举报
文章被收录于专栏:JAVA体系JAVA体系

1、前言

在现代应用程序开发中,数据库的变化是一个不可避免的过程。为了管理数据库版本、维护迁移历史记录和确保开发团队之间的一致性,Flyway 是一个强大的数据库迁移工具,而与 Spring Boot 集成可以让我们更轻松地进行数据库版本管理。

2、什么是Flyway?

Flyway 是一个开源的数据库迁移工具,它允许开发人员轻松地管理数据库的结构变化。通过使用 Flyway,您可以跟踪数据库架构的版本,并自动执行升级、回滚和迁移操作。Flyway 的核心思想是将数据库迁移脚本与应用程序代码分开,确保数据库的演进可以与代码的演进分开管理。

官网地址:Homepage - Flyway

3、为什么要使用 Flyway?

为了更好地理解为什么要使用 Flyway,让我们看一下一些使用 Flyway 的主要优势:

  1. 版本控制:Flyway 允许您将数据库架构的变化纳入版本控制系统中,就像您对应用程序代码做的那样。这样,您可以轻松跟踪数据库变化的历史记录,并在需要时进行回滚。
  2. 协作:当多个开发人员共同工作在一个项目中时,Flyway 可以确保每个人都使用相同的数据库架构。这有助于避免由于数据库不一致而引发的问题。
  3. 自动化:Flyway 提供了自动执行数据库迁移脚本的功能。这意味着您不需要手动运行 SQL 脚本来更新数据库,Flyway 会在应用程序启动时自动检测并执行必要的迁移。
  4. 回滚:如果出现问题,Flyway 允许您回滚到先前的数据库版本,从而避免了可能的数据丢失或破坏。

4、简单示例

4.1、创建Spring Boot工程

创建demo工程springboot-flyway,并集成好基本的springboot环境。

4.2、添加Flyway依赖

里需要注意MySQL版本,我这边安装的是MySQL5.7,所以flyway支持的最高版本为7.15.0。其他版本的对应关系为:

Flyway 8.x 和 MySQL 版本支持:

  • Flyway 8.x 版本通常支持 MySQL 8 和更高版本。

Flyway 7.x 和 MySQL 版本支持:

  • Flyway 7.x 版本通常支持 MySQL 5.7 和更高版本。
  • Flyway 7.0.0 引入了对 MySQL 8.0 JSON 数据类型的支持。

Flyway 6.x 和 MySQL 版本支持:

  • Flyway 6.x 版本支持 MySQL 5.7 和更高版本。

Flyway 5.x 和 MySQL 版本支持:

  • Flyway 5.x 版本支持 MySQL 5.1 以上的版本。
代码语言:javascript
复制
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>7.15.0</version>
</dependency>

4.3、Springboot添加Flyway配置

代码语言:javascript
复制
spring:
  datasource:
    dynamic:
      primary: primary
      # mysql数据源配置
      datasource:
        primary:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/flyway-demo?useUnicode=true&characterEncoding=utf8&useSSL=false
          username: root
          password: root
  flyway:
    # 是否开启flyway
    enabled: true
    encoding: utf-8
    # 默认存放sql脚本目录,默认为db/migration
    locations: classpath:db/migration
    # sql脚本文件名前缀,默认大写V
    sql-migration-prefix: V
    # sql脚本文件名称的分隔符,默认2个下划线__
    sql-migration-separator: __
    # 迁移sql脚本文件名称的后缀
    sql-migration-suffixes: .sql
    # metadata 版本控制信息表 默认 flyway_schema_history
    table: flyway_schema_history
    # 指定 baseline 的版本号,默认值为 1, 低于该版本号的 SQL 文件, migrate 时会被忽略
    baseline-version: 1

4.4、创建执行SQL脚本

在resources下创建db/migration目录。并创建执行MySQL脚本文件:

创建V1.0.0__create_user.sql:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `user`
(
    `USER_ID`      INT          NOT NULL AUTO_INCREMENT,
    `USER_NAME`    VARCHAR(100) NOT NULL COMMENT '用户姓名',
    `AGE`          INT          NOT NULL COMMENT '年龄',
    `CREATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `CREATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',
    `UPDATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `UPDATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',
    PRIMARY KEY (`USER_ID`)
    ) ENGINE = InnoDB
    DEFAULT CHARSET = utf8mb4;

创建V1.0.0__create_role.sql:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `role`
(
    `ROLE_ID`      INT          NOT NULL AUTO_INCREMENT,
    `ROLE_NAME`    VARCHAR(100) NOT NULL COMMENT '角色姓名',
    `CREATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `CREATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',
    `UPDATED_TIME` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `UPDATED_BY`   varchar(100) NOT NULL DEFAULT 'UNKNOWN',
    PRIMARY KEY (`ROLE_ID`)
    ) ENGINE = InnoDB
    DEFAULT CHARSET = utf8mb4;

4.5、启动测试

可以看到flyway-demo数据库已经成功执行了脚本文件。

查看MySQL,表已经成功创建。

4.6、Flyway版本管理

除了我们创建的role和user表以外,还有flyway_schema_history表。这个是用于记录数据库迁移的历史记录和状态信息。这个表的存在是为了跟踪和管理数据库的版本控制,以确保数据库的迁移和结构变更是可管理的和可追溯的。打开可以看到我们所执行的变迁脚本记录:

通过维护 flyway_schema_history 表,Flyway 可以在应用程序启动时检查数据库的当前状态,并确定需要应用的新迁移脚本。如果有新的脚本需要应用,Flyway 将自动执行这些脚本,确保数据库的结构与应用程序的版本保持一致。

5、SQL脚本文件命名规则

代码语言:javascript
复制
执行方式+版本号__sql名称.sql脚本后缀
---//例子:
V1.0.0__create_table.sql
  1. 以 V 开头的,仅执行一次。通常用于DDL表结构操作。V+版本后(版本号间的数字以“.” 或者“ _ ”分隔开,“ _ ”会自动编译成 “ . ” )+" __"+文件描述+后缀名。例如:V1.0.0__create_user.sql。
  2. 以 R 开头的,可以执行多次。如R__optimazed_user.sql。
  3. V开头的脚本文件,执行优先级一定比R的高。
  4. 版本号以最左对齐原则,如:
    1. 1.0.1比1.0.0版本高。
    2. 1.0.1.1比1.0.1版本高。
    3. 1.10.0比1.9.9版本高。

6、使用注意事项

  1. 迁移脚本命名规则:Flyway 依赖于迁移脚本的命名规则,通常是以版本号开头,后跟双下划线和描述性名称,例如 V1__create_table.sql。版本号用于确定脚本的执行顺序。
  2. 不要修改已应用的迁移脚本: 一旦迁移脚本被应用,不应修改它们。如果需要更改数据库结构,应创建一个新的迁移脚本来处理变化。
  3. 备份和回滚策略: 在进行数据库迁移之前,务必备份数据库以防止意外情况。Flyway 支持回滚到先前的版本,但仍然建议在生产环境中小心谨慎。
  4. 多环境配置: 使用 Spring Boot 配置文件来为不同的环境(开发、测试、生产)提供不同的数据库连接信息和 Flyway 配置。
  5. 监控和日志:配置适当的监控和日志记录以跟踪迁移的执行情况,以及处理可能出现的错误。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、前言
  • 2、什么是Flyway?
  • 3、为什么要使用 Flyway?
  • 4、简单示例
    • 4.1、创建Spring Boot工程
      • 4.2、添加Flyway依赖
        • 4.3、Springboot添加Flyway配置
          • 4.4、创建执行SQL脚本
            • 4.5、启动测试
              • 4.6、Flyway版本管理
              • 5、SQL脚本文件命名规则
              • 6、使用注意事项
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档