版本化数据库管理工具Flyway介绍和Spring Boot集成使用

文章目录

Flyway 是一个版本化数据库管理工具,用于跟踪、管理和应用数据库的变化。它非常适合在团队开发环境中使用,其中多个人员可能会在数据库结构进行更改。Flyway 通过版本控制可以帮助你确保所有人都在相同版本的数据库上工作,这有利于常规的开发和部署管道。

核心功能

  1. 版本控制: Flyway 通过版本脚本管理数据库变化历史,确保数据库状态的追踪和确定。
  2. 支持多种数据库: Flyway 支持所有常见的数据库系统,包括 MySQL, PostgreSQL, SQL Server等。
  3. 简体迁移: 只需简单的SQL脚本,即可迁移数据库,避免复杂的数据库迁移框架使用学习。
  4. 回滚支持: 支持版本回滚,方便恢复数据到某个历史状态。
  5. 集成&自动化: 能够与许多构建工具和环境集成,如Maven, Gradle, Spring Boot等。
  6. 社区和商业支持: 提供有免费的社区版和提供额外功能的商业版。

如何使用 Flyway

  • 下载和安装: 访问 Flyway 官网下载并安装合适版本。

  • 配置 : 在项目中创建flyway.conf配置文件,设置数据库的URL、用户和密码等信息。

  • 创建迁移脚本 : 使用标准的SQL创建迁移脚本,并根据约定的命名规则(如V1__Create_person_table.sql)存放在资源文件夹中。

  • 运行迁移 : 使用Flyway命令(migrate)从命令行运行迁移。如果使用Spring Boot,它会在应用程序启动时自动执行迁移。

  • 检查状态 : 使用info命令查看迁移的历史和当前状态。

  • 回滚 : 如果需要,可以使用undo命令(商业版特性)回滚到之前的版本。

最佳实践

  • 版本命名规范: 保持一致的命名规则,以保证版本按正确顺序执行。
  • 不要修改已经发布的迁移: 一旦一个迁移脚本已经提交,就不要再对其进行修改。如果需要进行更改,就应该创建一个新的迁移脚本。
  • 持续集成: 在你的CI/CD流程中集成Flyway,以便自动应用数据库更改作为构建过程的一部分。
  • 测试迁移: 在实施任何迁移之前首先在一个测试环境中进行测试,以确保它们不会造成意外的后果。
  • 备份数据库: 在执行大规模的迁移之前,确保已备份数据库,以防需要恢复。

使用Flyway时,务必要记住数据库迁移和修改是一个严肃的任务,一旦迁移到生产环境,就会直接影响数据的完整性和应用程序的运行。因此,通常建议首先在开发和测试环境中执行和验证数据库迁移。

完整、系统地学习和实施Flyway,可以极大地提升数据库管理的效率和安全性,尤其是在多人合作和自动部署流程中。

Spring Boot使用

  • 引入依赖,可以在maven或者gradle里引入依赖,这里以我们程序使用的gradle为例

    复制代码
      // flyway
      implementation 'org.springframework.boot:spring-boot-autoconfigure'
      implementation 'org.flywaydb:flyway-core'
  • 注意:如果flyway与Spring Boot版本不一致,会导致编译错误,可以不设置版本号,自动适配

  • 在配置文件application.yml里新增flyway配置

yml 复制代码
spring:
  flyway:
    enabled: true # 是否开启使用,默认开启
    schemas: public
    encoding: UTF-8
    locations: classpath:db/migration
    sql-migration-prefix: V # 前缀
    sql-migration-separator: __ # 版本号与名称的分隔符
    sql-migration-suffixes: .sql # 后缀
    table: flyway_schema_history
    baseline-on-migrate: true # 是否在应用迁移脚本之前自动执行基线迁移,默认值是 false
    validate-on-migrate: true # 是否在合并时开启校验
    baseline-version: 2.0.1.0 # 基线版本,等于低于这个版本,不校验,默认为1
  • 对于sql文件,默认在 db/migration 下,文件名称要符合配置规则
  • 项目启动时,会自动检测SQL文件,创建flyway_schema_history,并按照版本顺序执行SQL,进行表变动
  • 代码变动示例:SQL文件包含数据库表初始化和数据初始化,以及表结构变动,通过baseline-version参数进行版本更新
相关推荐
zhuyasen9 分钟前
深度定制 protoc-gen-go:实现结构体字段命名风格控制
后端·go·protobuf
观无12 分钟前
redis分布式锁
数据库·redis·分布式
Bug.Remove()14 分钟前
PostgreSQL数据类型使用
数据库·postgresql
eternal__day15 分钟前
Spring Cloud 多机部署与负载均衡实战详解
java·spring boot·后端·spring cloud·负载均衡
Livingbody25 分钟前
whisper 命令行解析【2】
后端
程序员秘密基地25 分钟前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
何中应26 分钟前
【设计模式-5】设计模式的总结
java·后端·设计模式
小胖同学~1 小时前
JavaWeb笔记
后端·servlet
逝水如流年轻往返染尘1 小时前
MySQL中的内置函数
数据库·mysql
风象南1 小时前
SpringBoot的5种日志输出规范策略
java·spring boot·后端