zoukankan      html  css  js  c++  java
  • SpringBoot整合Flyway(数据库版本迁移工具)

    简介

    在团队开发当中,有可能每个人都是使用自己本地的数据库。当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新。
    Flyway数据库版本迁移工具,目的就是解决该问题而诞生的(我自己想的)。每当我们更新数据库的时候,只需要添加SQL文件到指定目录中。Flyway会在数据库创建一个表,专门记录已更新的SQL文件。当我们下次执行时则不会执行已记录并且执行成功的SQL文件。

    整合

    maven

    现在的Flyway的最新版本已经到了6.4.2。我用的是6.3.3

    <!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>6.3.3</version>
    </dependency>
    

    application配置

    搞定了Flyway的依赖后,修改一下SpringBoot的application.ymlapplication.xml配置。

    spring:
      flyway:
        url: jdbc:mysql://192.168.138.132:3306/hotel-server?useUnicode=true&characterEncoding=UTF-8 
        user: johnson 
        password: 123456 
        table: flyway_schema_history
        enabled: true
        locations: classpath:db/migration
        clean-disabled: false
    
    

    flyway配置详解

    url:连接数据库的Url 默认为spring.datasource.url
    user:连接数据库的账号 默认为spring.datasource.username
    password:连接数据库的密码 默认为spring.datasource.password
    table:自定义数据库版本管理表 默认为 flyway_schema_history
    enabled:是否开启 默认为开启
    locations:SQL文件存放路径 默认 classpath:db/migration

    SQL文件

    上面的locations参数配置的SQL文件存放路径为 classpath:db/migrationclasspath对应的目录就是resources目录,创建后的目录如下图:
    flyway_path.jpg

    SQL文件如上图,SQL文件名必须为V1.0.x__xxx.sql注意:这里的下划线为两个_,我也是掉坑了才知道),这样可以对应SQL更新的版本号。启动了SpringBoot项目后,就会自动帮你执行SQL文件,可以看到数据库版本控制表中生成的数据:
    table_data.jpg

    clean操作

    Flyway的clean操作:彻底清除已配置的架构,它将有效地为您提供一个全新的起点。所有对象(表,视图,过程等)都将被删除。

    spring:
      flyway:
        clean-on-validation-error: true
        clean-disabled: false
    

    clean-on-validation-error:发生验证的错误时是否执行clean操作(如SQL执行失败),默认false,生产中必须使用false。
    clean-disabled:是否禁用clean操作,默认false,生产中必须使用true

    如果我们设置 clean-on-validation-error = trueclean-disabled = false
    当我们的SQL文件执行失败,在数据库版本控制表flyway_schema_history会添加一条失败的记录,success字段为0,此时并不会执行clean操作。
    当把SQL文件修改正确并执行完后,此时flyway_schema_history会把失败记录的success字段由0改为1。并且会执行clean操作!!!!!整个数据库的表里面的数据都被清空了!(除非你在SQL文件中添加了insert操作)
    其实在开发环境我也是不建议使用clean,毕竟填数据也是要时间的。。。

    总结

    团队开发当中的必备工具啊!不过生产环境当中记得把clean-disabled改为true

    个人博客网址: https://colablog.cn/

    如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您
    微信公众号

  • 相关阅读:
    在spring中该如何使用DTO,以及DTO和Entity的关系
    AngularJs踩过的坑
    springMVC正确使用GET POST PUT和DELETE方法,如何传递参数
    Mac下使用终端连接远程使用ssh协议的git服务器
    springMVC的异常处理
    根据业务规则分析业务对象,然后生成表结构
    在线资源--图片/json等
    js中的Hook
    diamond源码阅读-目录监控
    maven常用命令
  • 原文地址:https://www.cnblogs.com/Johnson-lin/p/13041991.html
Copyright © 2011-2022 走看看