• Flyway数据库版本管理工具的使用


      在团队开发当中,有可能每个人都是使用自己本地的数据库。当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新。我记得第一个项目进行字段管理的时候是将自己的脚步拿出来放到项目某个文件夹下面,如果结构变了告诉其他同事拉下来之后执行下脚本文件。还有一种方式是改完之后告诉其他人哪个表字段做了改动,脚本都没放,这种方式也使用过···

      Flyway数据库版本迁移工具可以解决该问题。每当我们更新数据库的时候,只需要添加SQL文件到指定目录中。

      Flyway的流程大概是在数据库创建一个表,专门记录已更新的SQL文件。当我们下次执行时则不会执行已记录并且执行成功的SQL文件,如果没有执行过sql脚本会执行脚本并且记录到自己的表中。这种方式对开发、对线上系统的升级就非常方便了。当然flyway还有其他非常方便的功能,都是可以配置的。

    github地址:https://github.com/flyway/flyway

    官网地址:https://flywaydb.org/

      而且我记得之前在一个项目是mybatisPlus些的,为了便于建表还引入了JPA进行建表,其实用flyway也可以,放一个初始化脚步,系统启动的时候自动执行脚步即可。

      flyway使用可以命令行、Java、Maven等,也和spring做了整合。下面研究在springboot项目中的使用。

    1. pom引入相关依赖

            <dependency>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-core</artifactId>
                <version>6.3.3</version>
            </dependency>

    2.application配置

    # FLYWAY (FlywayProperties)
    spring.flyway.url = jdbc:mysql://127.0.0.1:3306/media?useUnicode=true&characterEncoding=UTF-8
    spring.flyway.user = root
    spring.flyway.password = 123456
    # 存放flyway信息的表
    spring.flyway.table = flyway_schema_history
    spring.flyway.enabled = true
    # 存放数据库脚本的位置
    spring.flyway.locations = classpath:db/migration
    spring.flyway.clean-disabled = false
    spring.flyway.baseline-on-migrate = true
    # 允许乱序执行
    spring.flyway.out-of-order= true
    # 前缀后缀
    spring.flyway.sql-migration-prefix=V
    spring.flyway.sql-migration-separator=__
    spring.flyway.validate-on-migrate=false

      上面配置了数据库连接信息;

      spring.flyway.table 指定存放flyway记录版本信息的表;

      spring.flyway.locations 指定存放脚本文件的位置。classpath在boot项目中就是resources目录

      sql-migration-prefix和sql-migration-separator指定版本前缀和版本号和描述的分隔符

    关于更多的配置参考:https://flywaydb.org/documentation/configuration/configfile

    3. 建立sql文件

     这里说明下sql文件的命名。V版本号__描述.sql  版本号默认是1 (注意这里的下划线是两个),而且版本号不能重复。描述就是你本次sql改动是做什么了简单说明下。

    4.启动项目自动建表

      启动项目可以看到自动建的表。

     test是从脚本中读出来的,flyway_schema_history是flyway运行自身所需要的表,用于记录处理过的数据表。查看数据如下:

     5.执行第二个SQL

    如果这时候你想删掉test表,你删掉表   V20201106001__创建test表.sql  是没用的,因为flyway已经处理过该文件,不会进行处理。解决办法就是加一个文件做一个逆向的操作。如下:

    在db/migration目录下新建第二个SQL文件,名称为: V20201106002__删除test表.sql ,内容如下:

    drop table test

    启动项目让flyway执行脚本。

    再次查看数据表test已经删除

     查看flyway_schema_history表的数据如下:

    补充:flyway 脚本执行失败的话会导致服务启动失败,success 为 0 的时候,修改正确之后不会重新加载脚本,需要删掉flyway记录表的那条数据。

    【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
  • 相关阅读:
    python爬虫学习(7) —— 爬取你的AC代码
    python爬虫学习(6) —— 神器 Requests
    python爬虫学习(5) —— 扒一下codeforces题面
    python爬虫学习(4) —— 手刃「URP教务系统」
    听说你叫爬虫(3) —— 模拟登陆
    python爬虫学习(2) —— 爬一下ZOL壁纸
    python爬虫学习(1) —— 从urllib说起
    数据结构/ 串的模式匹配法 / kmp算法与next数组的构造
    ADWORLD web/PHP2
    ADWORLD web/upload1
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/13938641.html
Copyright © 2020-2023  润新知