目录
在现代应用程序开发中,数据库的变化是一个不可避免的过程。为了管理数据库版本、维护迁移历史记录和确保开发团队之间的一致性,Flyway 是一个强大的数据库迁移工具,而与 Spring Boot 集成可以让我们更轻松地进行数据库版本管理。
Flyway 是一个开源的数据库迁移工具,它允许开发人员轻松地管理数据库的结构变化。通过使用 Flyway,您可以跟踪数据库架构的版本,并自动执行升级、回滚和迁移操作。Flyway 的核心思想是将数据库迁移脚本与应用程序代码分开,确保数据库的演进可以与代码的演进分开管理。
官网地址:Homepage - Flyway
为了更好地理解为什么要使用 Flyway,让我们看一下一些使用 Flyway 的主要优势:
创建demo工程springboot-flyway,并集成好基本的springboot环境。
里需要注意MySQL版本,我这边安装的是MySQL5.7,所以flyway支持的最高版本为7.15.0。其他版本的对应关系为:
Flyway 8.x 和 MySQL 版本支持:
Flyway 7.x 和 MySQL 版本支持:
Flyway 6.x 和 MySQL 版本支持:
Flyway 5.x 和 MySQL 版本支持:
- <dependency>
- <groupId>org.flywaydb</groupId>
- <artifactId>flyway-core</artifactId>
- <version>7.15.0</version>
- </dependency>
- 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
在resources下创建db/migration目录。并创建执行MySQL脚本文件:
创建V1.0.0__create_user.sql:
- 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:
- 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;
可以看到flyway-demo数据库已经成功执行了脚本文件。
查看MySQL,表已经成功创建。
除了我们创建的role和user表以外,还有flyway_schema_history表。这个是用于记录数据库迁移的历史记录和状态信息。这个表的存在是为了跟踪和管理数据库的版本控制,以确保数据库的迁移和结构变更是可管理的和可追溯的。打开可以看到我们所执行的变迁脚本记录:
通过维护 flyway_schema_history 表,Flyway 可以在应用程序启动时检查数据库的当前状态,并确定需要应用的新迁移脚本。如果有新的脚本需要应用,Flyway 将自动执行这些脚本,确保数据库的结构与应用程序的版本保持一致。
- 执行方式+版本号__sql名称.sql脚本后缀
- ---//例子:
- V1.0.0__create_table.sql