Flyway在Springboot下的使用

说明

在大部分情况下,我们通常会在一个项目中使用多个数据库,例如开发使用dev库,生产使用prod库。我们如果需要部署新的服务到生产环境,则需要手动修改prod库,使其数据格式与dev库一致,不然会出错。最近这种事情干多了,想要项目在启动时自动执行,又不想自己写脚本来做,就搜到了Flyway这个项目https://github.com/flyway/flyway,使用了一下感觉还行,上线生产将enabled开启就行,在这记录一下使用方式。全部代码已上传github->springboot-flywaydb

快速开始

yml配置

spring:
  flyway:
    # 正式环境才开启
    enabled: true
    # 禁用数据库清理
    clean-disabled: true
    encoding: UTF-8
    # flyway 会在库中创建此名称元数据表,用于记录所有版本演化和状态,同一个库不同项目可能冲突,每个项目一张表来记录
    table: flyway_schema_history_flywaydb
    # 基线版本默认开始序号 默认为 1
    baseline-version: 1
    # 针对非空数据库是否默认调用基线版本,为空的话默认会调用基线版本
    baseline-on-migrate: true
    # 定义 afterMigrateError.sql 要清理的元数据表表名
    placeholders:
      flyway-table: ${spring.flyway.table}
    locations: classpath:/db

在resources目录下新建db目录

db目录下新建文件afterMigrateError.sql

-- SQL 执行失败,清理 flyway 元数据表中失败的执行记录
DELETE IGNORE FROM `${flyway-table}` WHERE success = 0;

Flyway读取文件格式如下,详情查看->migrations,我感觉基本上使用V感觉就够了ヽ(ー_ー)ノ

Flyway在Springboot下的使用_第1张图片

测试

db目录下新建文件V1__init.sql

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50717
 Source Host           : 151.168.99.100:3506
 Source Schema         : flywaydb

 Target Server Type    : MySQL
 Target Server Version : 50717
 File Encoding         : 65001

 Date: 15/12/2020 11:44:20
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for person
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person`  (
  `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', 'a');
INSERT INTO `person` VALUES ('2', 'b');

SET FOREIGN_KEY_CHECKS = 1;

db目录下新建文件V2__add_table.sql

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50717
 Source Host           : 151.168.99.100:3506
 Source Schema         : flywaydb

 Target Server Type    : MySQL
 Target Server Version : 50717
 File Encoding         : 65001

 Date: 15/12/2020 10:22:42
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

db目录下新建文件V3__insert_user.sql

INSERT INTO `user` VALUES ('1', 'a');
INSERT INTO `user` VALUES ('2', 'a');

运行结果

Flyway在Springboot下的使用_第2张图片

Flyway在Springboot下的使用_第3张图片

 

你可能感兴趣的:(Spring,Boot,flyway,sql)