Flyway, 数据库Schema管理利器

简介: 整天跟数据库打交道的程序员都知道,当数据库的Schema发生改变时是多么痛苦的事情。尤其是一个在不断开发完善的项目,随着需求变化,数据库的schema也会跟着变化,而追踪记录这些变化一向都是费时费力。

整天跟数据库打交道的程序员都知道,当数据库的Schema发生改变时是多么痛苦的事情。尤其是一个在不断开发完善的项目,随着需求变化,数据库的schema也会跟着变化,而追踪记录这些变化一向都是费时费力。如果你拥有多个测试环境,那么保证这些环境下的数据库的一致性的难度会成倍增加。

Flyway,一款小工具,应用它能够大大简化这方面的工作。

它的优点:

  1. convention over configuration,配置简单,使用方便;支持Sql及Java配置;

  2. 支持当前几乎所有的主流数据库;

  3. 拥有命令行工具、Maven、Gradle插件….应用场景广泛。

使用它之前先要了解一些概念:

  • 版本:对数据库的每一次变更可称为一个版本。

  • 迁移:Flyway把数据库结构从一个版本更新到另一个版本叫做迁移。

  • 可用的迁移:Flyway的文件系统识别出来的迁移版本。

  • 已经应用的迁移:Flyway已经对数据库执行过的迁移。

如何使用:

以Sql配置举例,建立一个文件夹用来存放所有数据库修改记录。

每次修改以’V版本号__描述.sql’的方式命名。比如V1__initial_version.sql, V2.1__create_table.sql,V2015.01.05__drop_view.sql

img_cb18898547bfb6d5dc5f2dd81c4bc848.png

Flyway会根据文件名自动识别版本顺序,并根据这些版本顺序来应用数据库修改。

配置

以使用Flyway的命令行工具为例。安装命令行工具后,运行时Flyway会根据以下路径来寻找配置文件。

  • 安装目录/conf/flyway.properties

  • 用户目录/flyway.properties

  • 当前目录/flyway.properties

或者直接在命令行使用 -configFile=myfile.properties来指定文件。

配置文件的一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
flyway.driver=org.hsqldb.jdbcDriver
flyway.url=jdbc:hsqldb:file:/db/flyway_sample
flyway.user=SA
flyway.password=mySecretPwd
flyway.schemas=schema1,schema2,schema3
flyway.table=schema_history
flyway.locations=classpath:com.mycomp.migration,database/migrations,filesystem:/sql-migrations
flyway.sqlMigrationPrefix=Migration-
flyway.sqlMigrationSeparator=__
flyway.sqlMigrationSuffix=-OK.sql
flyway.encoding=ISO-8859-1
flyway.placeholderReplacement=true
flyway.placeholders.aplaceholder=value
flyway.placeholders.otherplaceholder=value123
flyway.placeholderPrefix=#[
flyway.placeholderSuffix=]
flyway.resolvers=com.mycomp.project.CustomResolver,com.mycomp.project.AnotherResolver
flyway.callbacks=com.mycomp.project.CustomCallback,com.mycomp.project.AnotherCallback
flyway.target=5.1
flyway.outOfOrder=false
flyway.validateOnMigrate=true
flyway.cleanOnValidationError=false
flyway.baselineOnMigrate=false

命令行工具的几个命令:

  • Clean: 删除所有创建的数据库对象,包括用户、表、视图等。

  • Migrate: 对数据库依次应用版本更改。

  • Info:获取目前数据库的状态。那些迁移已经完成,那些迁移待完成。所有迁移的执行时间以及结果。

  • Validate:验证数据库结构与迁移脚本的异同。

  • Baseline:根据现有的数据库结构生成一个基准迁移脚本。

进阶

flyway提供sql配置和Java配置两种方式。sql配置可以方便实现对DDL的修改、一些引用数据的修改;而Java的方式则更强大些,可以应用更为复杂的场景,比如对某个数据表中的数据进行一些逻辑处理。具体使用请参见官方文档:(http://flywaydb.org/documentation/migration/java.html)http://flywaydb.org/documentation/migration/java.html

熟悉Ruby On Rails的程序员都知道Ruby On Rails自带一个数据库迁移工具,这个和那个差不多,可以说下JVM平台的数据库迁移工具,弥补了JVM平台下维护数据库Schema的不足。

相关文章
|
24天前
|
SQL Java 数据库
Spring Boot与Flyway:数据库版本控制的自动化实践
【10月更文挑战第19天】 在软件开发中,数据库的版本控制是一个至关重要的环节,它确保了数据库结构的一致性和项目的顺利迭代。Spring Boot结合Flyway提供了一种自动化的数据库版本控制解决方案,极大地简化了数据库迁移管理。本文将详细介绍如何使用Spring Boot和Flyway实现数据库版本的自动化控制。
23 2
|
4月前
|
SQL Java 数据库
使用Spring Boot和Flyway进行数据库迁移
使用Spring Boot和Flyway进行数据库迁移
|
6月前
|
安全 JavaScript Java
智慧图书管理|基于SprinBoot+vue的智慧图书管理系统(源码+数据库+文档)
智慧图书管理|基于SprinBoot+vue的智慧图书管理系统(源码+数据库+文档)
63 0
|
2月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
483 1
|
4月前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
190 1
|
5月前
|
NoSQL Redis 数据库
docker-compose 自动管理 数据库
docker-compose 自动管理 数据库
140 3
|
6月前
|
存储 数据可视化 关系型数据库
【MySQL进阶之路 | 基础篇】创建和管理数据库
【MySQL进阶之路 | 基础篇】创建和管理数据库
|
6月前
|
JavaScript 小程序 Java
土家风景文化|基于SSM+vue的土家风景文化管理平台的设计与实现(源码+数据库+文档)
土家风景文化|基于SSM+vue的土家风景文化管理平台的设计与实现(源码+数据库+文档)
47 0
|
6月前
|
JavaScript Java 关系型数据库
木里风景文化|基于SSM+vue的木里风景文化管理平台的设计与实现(源码+数据库+文档)
木里风景文化|基于SSM+vue的木里风景文化管理平台的设计与实现(源码+数据库+文档)
38 0
|
6月前
|
小程序 JavaScript 关系型数据库
实习生管理|基于SprinBoot+vue的微信小程序的实习生管理系统(源码+数据库+文档)
实习生管理|基于SprinBoot+vue的微信小程序的实习生管理系统(源码+数据库+文档)
57 0