当前位置: 代码网 > it编程>编程语言>Java > SpringBoot集成Flyway的完整生产方案

SpringBoot集成Flyway的完整生产方案

2026年08月28日 Java 我要评论
一、版本适配说明适配主流环境:springboot 2.x / 3.xmysql 8.x / postgresqlflyway 社区版(免费、够用)核心优势:零代码侵入、自动迁移、数据库脚本版本化、杜

一、版本适配说明

适配主流环境:

  • springboot 2.x / 3.x
  • mysql 8.x / postgresql
  • flyway 社区版(免费、够用)

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

二、引入 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两个下划线

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

示例:

  • v1__init_table.sql
  • v2__add_index.sql
  • v3__update_data.sql

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

格式:r__功能描述.sql

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

示例:r__user_stat_view.sql

六、新旧项目落地方案

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

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

2. 启动项目,flyway 自动:

  • 创建 flyway_schema_history 历史表
  • 自动执行所有未执行的 v 开头脚本

场景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

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

  • 已执行的 v 脚本绝对不能修改:修改会校验失败,需要变更直接新建高版本脚本
  • 生产环境永远开启 clean-disabled: true,禁止清空库
  • 社区版无回滚功能,回滚逻辑通过新脚本反向操作实现
  • 所有库表变更必须提交脚本,禁止线上手动改库
  • 脚本中禁止写业务查询 sql,只保留 ddl/dml 结构变更

九、常见报错解决

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方案的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com