「Flyway」数据库版本管理

前言

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

传统的开发模式

团队的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支持所有的主流数据库,如PostgreSQL、MySQL、H2和Hsql等。

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」数据库版本管理)