java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot集成Flyway方案

SpringBoot集成Flyway的完整生产方案

作者:奋力向前123

还在为数据库脚本管理混乱发愁,本文手把手教你SpringBoot集成Flyway的完整生产方案,涵盖Maven依赖、YAML配置、脚本命名规范、新旧项目落地步骤及常见报错解决,零代码侵入实现数据库版本化自动迁移,助你杜绝环境不一致和误操作风险,需要的朋友可以参考下

一、版本适配说明

适配主流环境:

核心优势:零代码侵入、自动迁移、数据库脚本版本化、杜绝环境不一致

二、引入 Maven 依赖

SpringBoot3 无需指定版本,父工程已托管;SpringBoot2 同样兼容。

<!-- Flyway 核心包 -->
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>
<!-- MySQL 驱动(根据自己项目选择) -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

三、生产级 YAML 完整配置(重点)

适配新项目 + 老项目已有数据库,可直接上线使用,杜绝误删、报错、校验失败等问题。

spring:
  # 数据库配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  # Flyway 生产配置
  flyway:
    # 开启Flyway
    enabled: true
    # SQL脚本存放路径
    locations: classpath:db/migration
    # 编码
    encoding: UTF-8
    # 迁移前校验脚本完整性(防止已执行脚本被篡改)
    validate-on-migrate: true
    # 【老项目必备】已有数据库自动生成基线,不会重复执行旧脚本
    baseline-on-migrate: true
    # 基线版本号(默认即可,无需修改)
    baseline-version: 1
    # 生产环境禁用clean(极其重要,防止清空数据表)
    clean-disabled: true
    # 关闭默认占位符替换(避免SQL中${}被解析报错)
    placeholder-replacement: false
    # 不自动修复,严格模式
    repair-on-migrate: false
    # 日志输出迁移详情
    loggers: slf4j

四、目录规范(强制统一)

必须在 resources 下创建固定目录:db/migration

完整目录结构:

resources
 └── db
     └── migration
         ├─ V1__init_database.sql
         ├─ V2__create_user_table.sql
         ├─ V3__add_user_column.sql
         └─ R__refresh_view.sql

五、脚本命名规范(严格遵守)

1. 版本迁移脚本(V开头)

格式:V版本号__描述.sql(两个下划线)

特点:执行一次永久生效,不会重复执行,执行后禁止修改内容

示例:

2. 重复执行脚本(R开头)

格式:R__功能描述.sql

特点:每次项目启动都会执行,适用于:视图、存储过程、函数、常量数据初始化

示例:R__user_stat_view.sql

六、新旧项目落地方案

场景1:全新项目(空数据库)

1. 新建 V1__init.sql 写入建库、建表语句

2. 启动项目,Flyway 自动:

场景2:老项目(已有数据表,无Flyway历史)

依靠配置 baseline-on-migrate: true 自动处理:

1. 启动项目,Flyway 检测到已有表,自动打基线:将当前数据库状态标记为 V1 版本

2. 后续新增脚本从 V2、V3 开始,不会重复执行旧 SQL

3. 完美兼容存量数据库,无需手动改表、导数据

七、常用调试命令(开发必备)

可通过 IDEA 插件 / Maven 命令执行

# 查看迁移状态
mvn flyway:info
# 执行迁移(手动触发)
mvn flyway:migrate
# 修复异常记录
mvn flyway:repair
# 清空数据库(仅本地开发!生产绝对禁用)
mvn flyway:clean

八、生产强制约束(避坑核心)

九、常见报错解决

1. Validate failed: migration checksum mismatch

原因:已执行的脚本被修改

解决:本地删除修改,新增新版本脚本;测试环境可执行 flyway:repair

2. Found non-empty schema with no metadata table

原因:已有旧数据库无Flyway记录

解决:开启 baseline-on-migrate: true 自动基线

以上就是SpringBoot集成Flyway的完整生产方案的详细内容,更多关于SpringBoot集成Flyway方案的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文