前言
什么是数据库版本管理,为什么要进行数据库版本管理?
传统的开发模式
团队的Developer
可以使用git,svn等代码管理工具很方便的同步代码,每个Developer
都需要在本地维护一个数据库,对数据库的任何修改:新建表,修改表字段等都需要通知其他Developer
,其他Developer
需要手动维护本地数据库。
存在的问题
1.数据库同步工作繁琐且易出现问题
2.经常出现相同的代码在不同的Developer
本地环境中出现不一样的结果
3.数据库的变更无法追踪,出现问题时不方便快速定位
数据库版本管理
数据库版本管理即管理并跟踪数据库的变更。目前有多种数据库版本管理工具,如Flyway
和Mybatis
,是独立于数据库的应用。
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直接生成add
了flyway
的dependencies
的项目。
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
数据库的情况下启动该应用,然后去数据库查看,会发现多了两个Table
:flyway_schema_history
和task
。
5.对应的代码库flyway-test
网友评论