Flyway 数据库迁移工具详解:安装、配置与使用教程

Flyway 数据库迁移工具详解:安装、配置与使用教程

Flyway 是一个开源的数据库迁移工具,用于管理和自动化数据库的版本控制。它可以与各种关系型数据库配合使用,帮助开发团队在应用程序开发生命周期中轻松处理数据库模式的变更。以下是 Flyway 的详细介绍,包括其核心功能、基本概念、安装和使用步骤。

核心功能

1. 数据库迁移:

  • 通过一组迁移脚本管理数据库模式变更,包括创建表、修改表结构、插入初始数据等。

2. 版本控制:

  • 每个迁移脚本都有一个唯一的版本号,Flyway 可以确保迁移脚本按正确的顺序应用,并且不会重复执行已经应用过的脚本。

3. 支持多种数据库:

  • 支持多种关系型数据库,包括 PostgreSQL、MySQL、Oracle、SQL Server、SQLite 等。

4. 集成工具和框架:

  • 可以与多种构建工具(如 Maven、Gradle)和框架(如 Spring Boot)集成,方便在构建和部署过程中自动执行数据库迁移。

基本概念

1. 迁移(Migration):

  • 迁移是一个 SQL 文件或 Java 类,包含需要应用于数据库的变更。Flyway 会按照版本顺序执行这些迁移。

2. 版本号(Versioned):

  • 每个迁移文件都有一个唯一的版本号,格式为 V[版本号]__描述.sql,例如 V1__initial_schema.sql。

3. 重复迁移(Repeatable Migration):

  • 这些迁移没有版本号,而是以 R 开头,格式为 R__描述.sql,例如 R__refresh_views.sql。重复迁移会在每次运行 Flyway 时检查是否有变更,如果有,则重新执行。

4. 元数据表(Metadata Table):

  • Flyway 在数据库中创建一个元数据表(默认名为 flyway_schema_history),用来跟踪已经应用的迁移和其状态。

安装与配置

1. 使用命令行工具

下载并解压 Flyway 命令行工具

wget https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/8.5.11/flyway-commandline-8.5.11-linux-x64.tar.gz
tar -xzf flyway-commandline-8.5.11-linux-x64.tar.gz
cd flyway-8.5.11

配置数据库连接
编辑 conf/flyway.conf 文件,添加数据库连接信息:

flyway.url=jdbc:postgresql://localhost:5432/mydb
flyway.user=myuser
flyway.password=mypassword

创建迁移脚本
在 sql 目录下创建迁移脚本,例如 V1__initial_schema.sql:

CREATE TABLE example (id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL
);

执行迁移

./flyway migrate

2. 使用 Maven

2.1 在 pom.xml 中添加 Flyway 插件:

<build><plugins><plugin><groupId>org.flywaydb</groupId><artifactId>flyway-maven-plugin</artifactId><version>8.5.11</version><configuration><url>jdbc:postgresql://localhost:5432/mydb</url><user>myuser</user><password>mypassword</password></configuration></plugin></plugins>
</build>

2.2 创建迁移脚本:
在 src/main/resources/db/migration 目录下创建迁移脚本,例如 V1__initial_schema.sql。

2.3 执行迁移:

mvn flyway:migrate

3. 使用 Gradle

3.1 在 build.gradle 中添加 Flyway 插件:

plugins {id 'org.flywaydb.flyway' version '8.5.11'
}flyway {url = 'jdbc:postgresql://localhost:5432/mydb'user = 'myuser'password = 'mypassword'
}

3.2 创建迁移脚本:
在 src/main/resources/db/migration 目录下创建迁移脚本,例如 V1__initial_schema.sql。

3.3 执行迁移:

./gradlew flywayMigrate

4. 集成 Spring Cloud

4.1 在 pom.xml 中添加 Flyway 依赖:

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>8.5.11</version>
</dependency>

4.2 配置数据库连接:

在 src/main/resources/application.properties 中添加 Flyway 配置:

spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword
spring.flyway.enabled=true

4.3 创建迁移脚本:

在 src/main/resources/db/migration 目录下创建迁移脚本,例如 V1__initial_schema.sql。

4.4 启动 Spring Cloud 应用:

在应用启动时,Flyway 会自动检测并执行迁移脚本。

5. 使用示例

假设你有一个 Spring Cloud 应用,并且你需要创建一个用户表和一个订单表。你可以按照以下步骤创建迁移脚本:

5.1 创建第一个迁移脚本 V1__create_user_table.sql:

CREATE TABLE users (id SERIAL PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

5.2 创建第二个迁移脚本 V2__create_order_table.sql:

CREATE TABLE orders (id SERIAL PRIMARY KEY,user_id INT NOT NULL,product_name VARCHAR(100) NOT NULL,price DECIMAL(10, 2) NOT NULL,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES users(id)
);

5.3 将这两个文件放入 src/main/resources/db/migration 目录中。

5.4 启动 Spring Boot 应用,Flyway 会自动执行这两个迁移脚本,创建 users 和 orders 表。

参考资源

  • Flyway 官方网站
  • Flyway GitHub 仓库

通过以上内容,你应该对 Flyway 有了一个全面的了解,并且知道如何将其集成到你的项目中以管理数据库迁移。如果你有进一步的问题或需要具体的指导,欢迎继续提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】text-decoration-skip是做什么用的,怎么使用

CSS的text-decoration-skip属性用于定义元素哪些部分的内容需要被文本修饰&#xff08;如下划线、上划线、删除线等&#xff09;所跳过。这可以控制所有该元素或该元素的祖先所绘制的文本修饰线。 text-decoration-skip的工作原理&#xff1a; 以text-decoration-skip: ink;为…

CSRF攻击

改账号和密码 里面有改的账号和密码 我改这个代码的123为456&#xff0c;然后在新的浏览器去执行&#xff0c;然后密码就又被改了 假如黑客知道修改密码的url&#xff0c;那么就危险了 但是也不是随便改 是有前提的&#xff0c;前提是&#xff1a; 1、已经登录了要改密码的…

计算机网络:网络层 - IPv6

计算机网络&#xff1a;网络层 - IPv6 IPv6 数据报IPv6 地址冒号十六进制记法地址分类 IPv4 到 IPv6 过渡双栈协议隧道技术 IPv6 是互联网协议的最新版本&#xff0c;它被设计用来取代现有的 IPv4 协议。这是因为 IPv4 存在一些根本性的限制&#xff0c;而 IPv6 则可以解决这些…

【three.js案例一】智慧星球

直接附上源码: import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;//场景 const scene = new THREE.Scene();const geometry = new THREE.SphereGeometry(50,32,16);console.log(.postion,geometry.attributes.position)…

【吊打面试官系列-Mysql面试题】实践中如何优化 MySQL?

大家好&#xff0c;我是锋哥。今天分享关于 【实践中如何优化 MySQL&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 实践中如何优化 MySQL&#xff1f; 最好是按照以下顺序优化&#xff1a; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1、SQL 语…

python内置函数+lambda函数

文章目录 前言1 类型转换int():将值转换为整数(十进制转换)float():将值转换为浮点数str():将值转换为字符串bool(): 将值转换为布尔值round()函数:四舍五入complex()---用来生成复数,当然复数也可手打,该函数与,int(),float()相比并没有变成复数类型的作用2 进制…

【Linux】基础IO——理解文件系统

1.理解文件系统 1.1.ls与stat 磁盘文件由两部分构成&#xff0c;分别是文件内容和文件属性。 文件内容就是文件当中存储的数据&#xff0c;文件属性就是文件的一些基本信息&#xff0c; 例如文件名、文件大小以及文件创建时间等信息都是文件属性&#xff0c;文件属性又被称…

探索高效存储与快速查找: 深入了解B树数据结构

探索高效存储与快速查找: 深入了解B树数据结构 一、什么是B树二、B树的实现2.1 节点的定义2.2 插入关键字2.3 删除关键字2.4 查找关键字2.5 遍历B树 一、什么是B树 B树&#xff0c;也称为B-tree&#xff0c;是一种多路平衡查找树。它被广泛用于文件系统和数据库之中&#xff0c…

CentOS7服务器中安装openCV4.8的教程

参考链接&#xff1a;Centos7环境下cmake3.25的编译与安装 参考链接&#xff1a;Linux安装或者升级cmake&#xff0c;例子为v3.10.2升级到v3.25.0(自己指定版本) 参考链接&#xff1a;Linux安装Opencv&#xff08;C&#xff09; 一、下载资源 1.下载cmake3.25.0的压缩包&am…

使用 yocto 搭建 qemuarm64 环境

文章目录 前言一、ubuntu 环境准备1. 编译主机基础的环境准备2. 编译主机相关依赖软件的安装二、yocto5.0 代码的获取与编译1. 获取代码2. yocto5.0 代码的编译2.1 source 环境变量2.2 修改相关配置文件2.3 编译3. 启动 qemu总结参考资料前言 本文主要介绍如何在 ubuntu 下使用…

SpringCloud总结(springcloud alibaba)

目录 版本说明&#xff08;很重要&#xff09; springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…

python全栈开发《07.数据类型之数字类型的应用、初识字符串类型》

目录 一、数字类型的简单应用二、初识字符串 1.什么是字符串2.字符串的内置函数与定义方法3.字符串的重要思想 三、python的内置函数id和len 一、数字类型的简单应用 对int与float的简单应用练习–初中生春游&#xff0c;主人公小编。 1.起因 小编学校组织春游&#xff0c;…

Django配置连接池:使用django-db-connection-pool配置连接池

一、该三方库文档使用 github地址&#xff1a; https://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.mdhttps://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.md1、选择指定版本&#xff0c;查看指定版本的文档和配置&am…

【Java】Object类中的toString、equals方法

Object类 所有类都直接或间接的继承自Object类&#xff0c;Object类是所有Java类的根基类。 也就意味着所有的Java对象都拥有Object类的属性和方法。 如果在类的声明中未使用extends关键字指明其父类&#xff0c;则默认继承Object类。 toString()方法 【1】Object类的toStr…

ChatGPT魔法背后的原理:如何做到词语接龙式输出?

介绍 我们都知道 ChatGPT 是 AIGC 工具&#xff0c;其实就是生成式人工智能。大家有没有想过这些问题 &#x1f914;️&#xff1a; 1、我们输入一段话&#xff0c;就可以看见它*噼里啪啦的一顿输出*&#xff0c;那么它的原理到底是什么&#xff1f; 2、到底它是怎么锁定这些…

【MySQL】事务一

事务一 1.什么是事务2.为什么会存在事务3.事务的版本支持4.事务的提交方式5.事务常见操作方式6.事务隔离级别6.1读未提交【Read Uncommitted】6.2读提交【Read Committed】6.3可重复读【Repeatable Read】6.4串行化【serializable】 点赞&#x1f44d;&#x1f44d;收藏&#x…

SSM家乡旅游网-计算机毕业设计源码04802

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;SSM家乡旅游网当然也不能排除在外。SSM家乡旅游网是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第八周) - 现代大语言模型

现代大语言模型 1. GPT-32. 上下文学习 2.1. 零样本提示2.2. 少样本提示2.3. 归纳头 3. 对齐 3.1. 指令微调3.2. 基于人类反馈的强化学习3.3. 事实与幻觉 1. GPT-3 GPT系列论文 GPT-1(2018): Improving Language Understanding by Generative Pre-TrainingGPT-2(2019): Lang…

基于BERT微调+模板填充快速实现文本转DSL查询语句

前言 Text2SQL是指将自然语言转化为类SQL查询语句&#xff0c;使得用户的查询文本可以直接实现和数据库交互&#xff0c;本文介绍一种以BERT为基础模型&#xff0c;通过模板填充来实现的Text2SQL算法和产品化。 内容摘要 Text2SQL任务说明模板填充的思路条件列选择子模型搭建…

【免费Web系列】大家好 ,今天是Web课程的第二一天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 员工管理 1. 条件分页查询 1.1 概述 在页面原型中&#xff0c;我们可以看到在查询员工信息列表时&#xff0c;既需要根据条件动态查询&#xff0c;还需要对查询的结果进行分页处理。 那要完成这个页面…