版本化数据库管理工具Flyway介绍和Spring Boot集成使用
2023-12-21 18:54:26
Flyway 是一个版本化数据库管理工具,用于跟踪、管理和应用数据库的变化。它非常适合在团队开发环境中使用,其中多个人员可能会在数据库结构进行更改。Flyway 通过版本控制可以帮助你确保所有人都在相同版本的数据库上工作,这有利于常规的开发和部署管道。
核心功能
- 版本控制: Flyway 通过版本脚本管理数据库变化历史,确保数据库状态的追踪和确定。
- 支持多种数据库: Flyway 支持所有常见的数据库系统,包括 MySQL, PostgreSQL, SQL Server等。
- 简体迁移: 只需简单的SQL脚本,即可迁移数据库,避免复杂的数据库迁移框架使用学习。
- 回滚支持: 支持版本回滚,方便恢复数据到某个历史状态。
- 集成&自动化: 能够与许多构建工具和环境集成,如Maven, Gradle, Spring Boot等。
- 社区和商业支持: 提供有免费的社区版和提供额外功能的商业版。
如何使用 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配置
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
参数进行版本更新
文章来源:https://blog.csdn.net/u010882234/article/details/135136727
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!