版本化数据库管理工具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参数进行版本更新
相关推荐
飞的肖3 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
Q_19284999065 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
良许Linux9 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
求知若饥21 分钟前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs
Mr.131 小时前
数据库的三范式是什么?
数据库
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
gb42152871 小时前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
Python之栈1 小时前
【无标题】
数据库·python·mysql