自学内容网 自学内容网

springboot 集成flyway数据库迁移版本控制详细教程

Flyway 是一个开源的数据库迁移工具,它帮助开发者在项目中管理数据库模式的版本控制。Spring Boot 对 Flyway 提供了很好的支持,使得集成过程变得非常简单。下面是一个详细的教程,指导如何在 Spring Boot 应用程序中集成 Flyway。

准备工作

确保你的开发环境中已经安装了以下软件:

  • Java JDK(建议使用最新版本)
  • Maven 或 Gradle(用于构建项目)
  • 一个支持 SQL 的数据库(如 MySQL, PostgreSQL, H2 等)

步骤 1: 创建 Spring Boot 项目

如果你还没有一个 Spring Boot 项目,可以使用 Spring Initializr 快速创建一个。访问 Spring Initializr 并选择以下选项:

  • Project: Maven Project 或 Gradle Project
  • Language: Java
  • Spring Boot 版本:选择最新的稳定版
  • 添加依赖:Web, JPA, 和 Flyway

点击 “Generate” 下载项目压缩包,并解压到你的工作目录。

步骤 2: 添加依赖

pom.xml文件添加如下配置

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
  <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
        </dependency>

步骤 3: 配置数据库连接

打开项目的 application.properties 文件或 application.yml 文件,添加数据库连接信息。例如,如果你使用的是 MySQL 数据库,配置可能如下所示:

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

步骤 4: 配置 Flyway

在大多数情况下,你不需要额外配置 Flyway,因为 Spring Boot 会自动配置 Flyway 来扫描 src/main/resources/db/migration 目录下的迁移脚本。但是,如果你想自定义一些设置,可以在 application.propertiesapplication.yml 中进行配置。例如:

application.properties

spring.flyway.enabled=true
spring.flyway.locations=classpath:/db/migration,classpath:/custom-migration

application.yml

spring:
  flyway:
    enabled: true
    locations: classpath:/db/migration,classpath:/custom-migration

更多配置示例

spring:
  # 数据库连接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flyway-demo?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
  flyway:
    # 是否启用flyway
    enabled: true
    # 编码格式,默认UTF-8
    encoding: UTF-8
    # 迁移sql脚本文件存放路径,默认db/migration
    locations: classpath:db/migration
    # 迁移sql脚本文件名称的前缀,默认V
    sql-migration-prefix: V
    # 迁移sql脚本文件名称的分隔符,默认2个下划线__
    sql-migration-separator: __
    # 迁移sql脚本文件名称的后缀
    sql-migration-suffixes: .sql
    # 迁移时是否进行校验,默认true
    validate-on-migrate: true
    # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
    baseline-on-migrate: true
  • 可以自行修改,系统默认配置就是上述代码(即不配置时)

步骤 5: 编写迁移脚本

Flyway 使用版本化的 SQL 脚本来管理数据库迁移。脚本应该放在 src/main/resources/db/migration 目录下,文件名格式为 V<version>__<description>.sql。例如:

  • V1__create_users_table.sql
  • V2__add_email_to_users.sql

每个脚本中的 SQL 命令会在应用启动时按照版本号顺序执行。这是一个简单的示例脚本:

V1__create_users_table.sql

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);

步骤 6: 检查 Flyway 初始化

确保 Flyway 在启动时正确初始化,如果运行代码时,没有执行sql脚本。你可以在 Application 类中手动调用 Flyway 的初始化方法:

import org.flywaydb.core.Flyway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.sql.DataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class YourApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(YourApplication.class, args);
        Flyway flyway = context.getBean(Flyway.class);
        flyway.migrate();
    }

    @Bean
    public Flyway flyway(DataSource dataSource) {
        return Flyway.configure().dataSource(dataSource).load();
    }
}

步骤 7: 运行应用程序

完成以上步骤后,你可以运行 Spring Boot 应用程序。Flyway 将自动检测并执行迁移脚本。如果一切正常,你应该能够看到数据库表结构已经被成功创建或更新。

步骤 8: 检查迁移状态

Flyway 默认会在数据库中创建一个名为 flyway_schema_history 的表来记录所有的迁移操作。你可以查询这个表来检查迁移的状态。

注意事项

  • 确保数据库用户有足够的权限来创建和修改表。
  • 在生产环境中谨慎使用迁移工具,确保所有更改都经过充分测试。
  • 可以通过 spring.flyway.baseline-on-migrate=true 参数来启用基线迁移,这对于已有数据的老系统特别有用。

通过以上步骤,你应该能够在 Spring Boot 应用中成功集成 Flyway 来管理数据库迁移。


原文地址:https://blog.csdn.net/weixin_40986713/article/details/142884041

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!