美文网首页
「Flyway」数据库版本管理

「Flyway」数据库版本管理

作者: 廖雪青 | 来源:发表于2019-06-04 11:07 被阅读0次
    前言

    什么是数据库版本管理,为什么要进行数据库版本管理?

    传统的开发模式

    团队的Developer可以使用git,svn等代码管理工具很方便的同步代码,每个Developer都需要在本地维护一个数据库,对数据库的任何修改:新建表,修改表字段等都需要通知其他Developer,其他Developer需要手动维护本地数据库。
    存在的问题
    1.数据库同步工作繁琐且易出现问题
    2.经常出现相同的代码在不同的Developer本地环境中出现不一样的结果
    3.数据库的变更无法追踪,出现问题时不方便快速定位

    数据库版本管理

    数据库版本管理即管理并跟踪数据库的变更。目前有多种数据库版本管理工具,如FlywayMybatis,是独立于数据库的应用。

    Flyway

    一.Migrate
    Migrate是指把数据库Schema迁移到最新版本,是Flyway工作流的核心功能。

    二.Metadata
    Metadata(元数据)表,要用于记录版本变更历史以及Checksum。该表的表名:flyway_schema_history。首次运行应用或执行对应的Flyway命令时,会自动创建该表格。每执行完一个版本脚本都会新插入一条数据以本次对数据库的更改。

    三.Migrations
    Migrations是指Flyway在更新数据库时是使用的版本脚本。

    每次对数据库的更改,都应该新建一个脚本,而不能修改原有脚本。如果直接修改原有脚本,在Checksum的时候会失败。

    Spring Boot项目中,该脚本默认放在db.migration目录下。Migrations不仅可以写成sql脚本,还可以写在Java代码中.

    四.脚本命名
    Flyway是约定优于配置,所以有对应的命名规范。sql脚本的命名类似V1__init_tables.sql ,也可以用当前时间作为V后面的版本号,如V20190603_1639__Create_Task_table.sql

    五.支持的数据库
    Flyway支持所有的主流数据库,如PostgreSQLMySQLH2Hsql等。

    Spring boot项目使用Flyway

    1.Gradle的配置文件build.gradle文件的依赖中增加Flyway

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compile('mysql:mysql-connector-java')
        implementation 'org.flywaydb:flyway-core'
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    

    可以在https://start.spring.io直接生成addflywaydependencies的项目。

    2.在application.properties文件中增加数据库配置

    spring.datasource.url=jdbc:mysql://localhost:3306/flywayDB?autoReconnect=true&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=password
    
    spring.flyway.url=jdbc:mysql://localhost:3306/flywayDB
    spring.flyway.user=root
    spring.flyway.password=password
    

    3.在db.migration目录下新建脚本文件V20190603_1639__Create_Task_table.sql

    CREATE TABLE `task` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `description` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    4.在确保mysql中有flywayDB数据库的情况下启动该应用,然后去数据库查看,会发现多了两个Tableflyway_schema_historytask

    5.对应的代码库flyway-test

    相关文章

      网友评论

          本文标题:「Flyway」数据库版本管理

          本文链接:https://www.haomeiwen.com/subject/lgakxctx.html