Flyway--01入门

本文介绍了一款开源数据库版本管理工具Flyway的基本原理及应用。通过实例演示了如何使用Flyway实现数据库版本的自动同步,包括配置环境、编写SQL脚本及执行迁移等关键步骤。

1.简介
Flyway是一款开源的数据库版本管理工具,Flyway可以实现自动化的数据库版本管理,并且能够记录数据库版本更新记录;通常在项目开始时会针对数据库进行全局设计,但在开发产品新特性过程中,难免会遇到需要更新数据库Schema的情况,如:添加新表,添加新字段和约束等,这种情况在实际项目中也常发生。那么,当开发人员完成了对数据库更的SQL脚本后,如何快速地在其他开发者机器上同步?并且如何在测试服务器上快速同步?以及如何保证集成测试能够顺利执行并通过呢?以上问题可以通过Flyway工具来解决,Flyway可以实现自动化的数据库版本管理,并且能够记录数据库版本更新记录;

2.测试Demo
1.环境:创建普通java项目,本地搭建好Mysql,项目引入jar包mysql-connector-java-5.1.6.jar和flyway-core-3.2.1.jar
2.代码:

 import org.flywaydb.core.Flyway;

public class Main {

    public static void main(String[] args) {
        // 创建Flyway实例
        Flyway flyway = new Flyway();

        // 设置数据库
        flyway.setDataSource("jdbc:mysql://localhost:3306/test", "root", "123456");

        // 开始迁移
        flyway.migrate();

    }
}

3.在classpath路径下创建目录db,在db目录下创建子目录migration,在目录下创建文件V1__Create_person_table.sql
文件内容如下:
CREATE TABLE person (
id INT,
name VARCHAR(100)
);
备注:这里的目录是固定格式,sql文件命名有一定规则,这里先暂时这样创建,sql的作用是创建一个表;
如果使用eclipse的maven项目,那么db目录就是在src/main/resource下,如果是idea,db就是在out下面,(和编译得到的class文件同级)
4.数据库:
运行java程序,检查数据库,发现数据库中多了两张表,一张person,一张schema_version,前者就是sql创建的,后者是flyway工具用于对数据库进行版本控制的辅助表,借助于辅助表来完成对数据库的版本控制,具体细节后续再慢慢理解,先简单使用;
5.其他:
eclipse的maven项目里面添加jar包的约束

<dependency>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-core</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

idea的sql文件路径:

这里写图片描述

<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、付费专栏及课程。

余额充值