• SpringBoot - SpringBoot整合Flyway实现数据库的迁移


    关于flyway的介绍就不多做介绍了,大家可以看下参考下面的文章:

    flyway官方文档地址:https://documentation.red-gate.com/fd

    其他相关博文地址:

    https://zhuanlan.zhihu.com/p/65584224

    https://zhuanlan.zhihu.com/p/358998547

    https://blog.csdn.net/xyc1211/article/details/124838231

    1. 引入flyway依赖
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.5.6version>
            <relativePath/>
        parent>
    
        <groupId>org.examplegroupId>
        <artifactId>flywayartifactId>
        <version>1.0-SNAPSHOTversion>
    
        <dependencies>
            <dependency>
                <groupId>org.flywaydbgroupId>
                <artifactId>flyway-coreartifactId>
                <version>5.2.4version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-jdbcartifactId>
            dependency>
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>1.1.24version>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/javadirectory>
                    <includes>
                        <include>**/*.ymlinclude>
                        <include>**/*.propertiesinclude>
                        <include>**/*.xmlinclude>
                    includes>
                    <filtering>falsefiltering>
                resource>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <includes>
                        <include>**/*.*include>
                    includes>
                    <filtering>falsefiltering>
                resource>
            resources>
        build>
    
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    2. Springboot配置文件

    存在数据库storage :

    server:
      port: 8081
    
    spring:
      datasource:
        druid:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/storage?useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: root
    
      # flyway 配置
      flyway:
        # 启用或禁用 flyway
        enabled: true
        # SQL 脚本的目录,多个路径使用逗号分隔 默认值 classpath:db/migration
        locations: classpath:db/migration
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3. 编写迁移脚本文件

    在目录db/migration下编写迁移脚本文件:

    在这里插入图片描述

    其中,V3.0.10.1__init_table.sql 是创建一个数据库表 t_storage:

    CREATE TABLE `t_storage` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
      `nameSpace` varchar(64) NOT NULL COMMENT '隔离字段',
      `groupId` varchar(128) NOT NULL COMMENT '分组,比如不同app',
      `dataId` varchar(64) NOT NULL COMMENT '数据存储id',
      `dataValue` mediumtext DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE,
      UNIQUE KEY `nameSpace` (`nameSpace`,`groupId`,`dataId`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    其中,V3.0.10.2__storage_init_data.sql 是向数据库表 t_storage 中添加数据:

    INSERT INTO `t_storage`(`id`, `nameSpace`, `groupId`, `dataId`, `dataValue`) VALUES (10, '_system', 'logsetting', 'thresholdConfig', '{\"threshold\":82,\"allSize\":\"47G\",\"usedSize\":\"0\",\"remainSize\":\"47G\",\"usingRate\":0,\"diskName\":null}');
    
    INSERT INTO `t_storage`(`id`, `nameSpace`, `groupId`, `dataId`, `dataValue`) VALUES (34, '_system', 'logsetting', 'lruConfigFilepath', '{\"dsMongo\":null,\"dsFile\":null,\"dsEs\":null}');
    
    INSERT INTO `t_storage`(`id`, `nameSpace`, `groupId`, `dataId`, `dataValue`) VALUES (45, '_system', 'auth', 'policy', '{\"passwordPeriod\":90,\"errorTimes\":5,\"lockTime\":5,\"minLength\":8}');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    4. 启动项目

    在这里插入图片描述

    查看数据库 storage,可以看到数据库中新建了一张t_storage表,并向里面插入了3条数据:

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    计算机网络:应用层 (DNS FTP)
    STM32G030F6 (SOP-20)Cortex ® -M0+, 32KB Flash, 8KB RAM, 17 GPIOs
    A-Level Business Studies 真题及解析(2)
    对于volatile的看法
    Sentienl【动态数据源架构设计理念与改造实践】
    lenovo联想笔记本ThinkPad系列T15p或P15v Gen3(21DA,21DB,21D8,21D9)原厂Win11系统镜像
    全面超越AutoGPT,面壁智能联合清华NLP实验室开源大模型「超级英雄」XAgent
    uni-app 之 下拉刷新,上拉加载,获取网络列表数据
    asp.net mvc点餐系统餐厅管理系统
    基于android的移动学习平台(前端APP+后端Java和MySQL)
  • 原文地址:https://blog.csdn.net/qq_42764468/article/details/127537303