Flyway使用入门

数据库版本控制工具Flyway入门指南

一 Flyway是什么

Flyway是独立于数据库的应用、管理并跟踪数据库变更的使用Java编写的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。

官网 Redgate Flyway - Automate database deployments across teams and technologies

二 Flyway使用场景

开发人员在合作的时候经常遇到以下场景:


场景一:开发环境,多人共用一套数据库
开发正调试着,忽然代码报错“XX字段不存在”:谁TMD又把表结构给改了……


场景二:开发环境,每个人各自搭建自己的数据库
开发完一个功能,提交代码、更新,重启准备调试下,代码报错“XX表不存在”
吼一嗓子:谁又改表结构了?什么?每个人都要把xxx.sql执行一遍?
……
新员工:我要搭一套开发数据库,到底应该执行哪些SQL脚本?


场景三:开发转测试
测试:你看这个功能是不是有个Bug?
开发1:哦,你要执行一下这个SQL脚本。
测试:嗯,现在没问题了,但是怎么保证这个脚本没有Bug,我能再重现、测试一遍吗?
开发:额~,你重新搭一遍数据库吧……


场景四:搭建一套演示环境
执行SQL脚本1、SQL脚本2、SQL脚本3……启动服务失败!
什么?这个脚本N是测试版本的,war包是已经上线的版本?
删库再来一遍……
传统的解决方案就是在一个固定的文件夹中,将需要跑的SQL脚本放在里面。开发人员在合作的时候,A修改了数据库,在B遇到问题的时候,可能需要交流沟通一下,去跑需要的脚本。在项目上线的过程中,也是运维人员在规定的文件夹中,找到需要跑的SQL脚本。运行它们。

lyway等migration工具就是要把开发人员和运维人员从以上这些场景的繁琐工作中解放出来,如果使用maven的话,那么在项目编译(SpringBoot运行Application)的时候,SQL数据库的改动就自动进入数据库,只要启动成功,开发或者运维人员对SQL数据库的migrate过程是无感知的,项目依然可以照常运行。

三 Flyway命名规范

sql 脚本存放目录:src/main/resources/db/migration
Flyway 将 SQL 文件分为 Versioned 、Repeatable 和 Undo 三种:

Versioned 用于版本升级, 每个版本有唯一的版本号并只能执行一次.
Repeatable 可重复执行, 当 Flyway检测到 Repeatable 类型的 SQL 脚本的 checksum 有变动, Flyway 就会重新应用该脚本. 它并不用于版本更新, 这类的 migration 总是在 Versioned 执行之后才被执行。
Undo 用于撤销具有相同版本的版本化迁移带来的影响。每个undo文件对应一个Version文件。


说明:V大写,中间是两个下划线(__)

3.png

四 Flyway使用入门

Maven插件,运行命令方式集成flyway

Quickstart - Maven - Redgate Flyway - Product Documentation

Springboot集成flyway

Spring Boot 集成 Flyway,数据库也能做版本控制,太牛逼了! - Java技术栈 - 博客园

注意:需要导入spring-boot-starter-jdbc 才能自动引入flyway自动配置。
 

Spring Boot 默认提供了对 Flyway 的自动配置:

org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration

开发好习惯:

1)只增量添加脚本,不去修改意见存在的脚本。(多人并行开发,你修改了别人就起不来了)

2)创建表前,先drop table。最坏情况下,仅仅truncae flyway_schema_history就可以自动起来了。

参考文章:

Flyway基本介绍及基本使用-阿里云开发者社区

Flyway快速上手教程 - 简书

<think>我们正在处理用户关于Spring Boot集成Flyway使用金仓Kingbase数据库的问题。 根据用户需求,我们需要提供一个快速入门指南。 注意:用户提到了金仓Kingbase数据库,因此我们需要针对Kingbase进行配置。 同时,我们参考了站内引用[1]中关于Oracle存储过程在Flyway中执行时需要在PL/SQL块末尾添加`/`的规则,但金仓Kingbase是基于PostgreSQL的,所以可能不需要这个规则,但我们还是要注意Kingbase的PL/SQL语法要求。 步骤: 1. 创建Spring Boot项目 2. 添加依赖(包括Flyway和Kingbase驱动) 3. 配置数据库连接和Flyway属性 4. 创建Flyway迁移脚本 5. 运行并验证 注意:Kingbase的JDBC驱动和URL格式。 由于Kingbase兼容PostgreSQL,所以我们可以使用PostgreSQL的驱动,但官方推荐使用Kingbase自己的驱动。 下面开始详细步骤:</think>### Spring Boot 集成 Flyway 金仓 Kingbase 快速入门指南 #### 1. **添加依赖** 在 `pom.xml` 中添加 Flyway 和 Kingbase JDBC 驱动: ```xml <dependencies> <!-- Flyway --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>9.22.3</version> </dependency> <!-- Kingbase JDBC 驱动 --> <dependency> <groupId>com.kingbase</groupId> <artifactId>kingbase8</artifactId> <version>8.6.0</version> <!-- 根据实际版本调整 --> </dependency> </dependencies> ``` #### 2. **配置数据库连接** 在 `application.properties` 中配置 Kingbase 连接和 Flyway: ```properties # Kingbase 配置 spring.datasource.url=jdbc:kingbase8://localhost:54321/mydb spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.kingbase8.Driver # Flyway 配置 spring.flyway.locations=classpath:db/migration spring.flyway.baseline-on-migrate=true # 首次运行时创建基线 ``` #### 3. **创建迁移脚本** 在 `src/main/resources/db/migration` 目录下创建 SQL 脚本: - 文件命名规则:`V1__Initial_schema.sql` ```sql -- 示例:创建用户表 CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 注意:Kingbase 的 PL/SQL 块需用 $$ 包裹(兼容 PostgreSQL 语法) CREATE OR REPLACE FUNCTION update_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; ``` #### 4. **启动应用** 运行 Spring Boot 应用时 Flyway 会自动执行迁移: ```bash mvn spring-boot:run ``` 控制台将显示日志: ``` INFO: Successfully applied 1 migration (execution time 0.2s) ``` #### 5. **验证结果** 检查 Kingbase 数据库: - `flyway_schema_history` 表记录迁移详情 - `users` 表结构是否创建成功 --- ### 关键注意事项 1. **Kingbase 语法兼容性** - 使用 PostgreSQL 语法(Kingbase 兼容 PG) - PL/SQL 块需用 `$$` 包裹(见步骤 3 示例) - 不支持 Oracle 的 `/` 结束符[^1] 2. **迁移脚本命名规范** - 前缀 `V` + 版本号 + `__` + 描述(如 `V2__Add_email.sql`) - 每次启动按版本号顺序执行 3. **生产环境建议** - 禁用 `spring.flyway.baseline-on-migrate`(改为手动基线) - 使用 `spring.flyway.validate-on-migrate=true` 校验脚本 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值