第十三节 使用Flyway管理线上数据库

一、Flyway解决的问题

        Flyway用于解决线上数据库的结构问题。一般项目都会分期,一期二期三期。

        随着项目的推进,上线后的数据库结构也可能也会有所变动。因此,需要使用Flyway来解决数据库变动的问题。

        修改生产上的数据库不可能像我们在开发的时候那么草率,需要明确的数据库变动SQL文件。

        Flyway就用于解决上述问题。 

      Flyway优点:明确数据库变动SQL文件

      Flyway缺点:支持MySQL,但是不支持Oracle。如果你的生产库只有MySQL,那么可以使用Flyway。

      我再推荐一款数据库工具,名字叫Liquibase,能够支持MySQL与Oracle脚本管理。

二、使用Flyway

        第一步:首先导入依赖。

 <properties>
  <flyway.version>5.2.4</flyway.version>
 </properties>
 <dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>${flyway.version}</version>
 </dependency>
 <plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>${flyway.version}</version>
 </plugin>

        第二步:在yml配置文件中配置Flyway参数。重点是下面的配置中的locations属性,它决定了SQL文件所在路径。

#dev分支配置内容
spring:
  flyway:
    baseline-on-migrate: true
    clean-disabled: true
    locations: classpath:/flyway/dev
    out-of-order: true

#test分支配置内容
spring:
  flyway:
    baseline-on-migrate: true
    clean-disabled: true
    locations: classpath:/flyway/test
    out-of-order: true

#pro分支配置内容
spring:
  flyway:
    baseline-on-migrate: true
    clean-disabled: true
    locations: classpath:/flyway/pro
    out-of-order: true

        第三步:根据上述配置的locations指定的位置,创建文件夹。如图所示

       

        第四步:新建脚本。命名规则我推荐为 : V版本号__数据库名称,例如 V1.0.1__basessm.sql。注意,是双下划线。

        比如下一个文件V1.0.1__basessm.sql 

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for t_student
-- ----------------------------
DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_student
-- ----------------------------
INSERT INTO `t_student` VALUES ('1', '开发库大宇', '22');
INSERT INTO `t_student` VALUES ('2', '开发库小宇', '20');

          启动项目,效果如GIF所示。

          第五步:模拟线上修改数据库结构。

          假设刚才操作的t_student表在二期要修改结构,增加一列 电话 telephone 列。并且增加一张t_cost费用表.

          我们可以定义一个文件叫做 V1.0.2__basessm.sql,版本号增加1。

           V1.0.2__basessm.sql文件如下:

ALTER TABLE t_student ADD telephone VARCHAR(255);

DROP TABLE IF EXISTS `t_cost`;
CREATE TABLE `t_cost` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

         如上述效果图所示,在原有的V1.0.1__basessm.sql文件的基础之上,数据库执行了V1.0.2__basessm.sql中变动的SQL语句。这样,我们就能够轻松的修改已经在生产上的数据的结构了。

三、源码下载

        本章节项目源码:点我下载源代码

        目录贴:跟着大宇学SpringBoot-------目录帖

 

posted @ 2022-07-17 12:14  小大宇  阅读(259)  评论(0编辑  收藏  举报