版本化数据库管理工具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 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
计算机毕设定制辅导-无忧学长3 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
麦兜*3 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了4 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
大只鹅4 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头4 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
天河归来4 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
程序员柳4 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、4 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机4 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7