Flyway 持续数据库集成
Posted 薛定谔的DBA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flyway 持续数据库集成相关的知识,希望对你有一定的参考价值。
数据难以管理,数据库难以测试。数据库部署比应用程序部署复杂得多,因为您不能每次都从头开始重新部署代码。数据库自动化很困难,而且通常是担心弄乱关键数据,这可能会暂停后续开发并减慢业务交付。
现在,我们推荐一款开源数据库发布工具 —— Flyway 。
什么是持续集成?
持续集成是一种开发实践,它鼓励开发人员尽可能频繁地将代码的更改签入源存储库。由于代码频繁的被签入并集成为更小的部分,因此更容易在早期识别和解决问题。每次代码提交都会在单独的 CI 服务器中触发自动构建,并执行单元和集成测试。因为任何测试失败的构建都不允许签入源存储库,代码质量得到维护。
您需要记住的一件重要事情是,如果没有源代码控制,您就无法进行持续集成。
简而言之,要实现持续集成,需要执行以下 5 项活动:
-
维护源代码控制
-
较小的代码提交
-
频繁的代码检查
-
自动化构建
-
自动化测试
为什么需要 Flyway 呢?
在为应用程序实现数据层时,您需要考虑 DDL 和 DML 脚本的迁移策略。处理关系数据库中的更改可能会更加复杂,因为您需要找到数据库的当前状态并跟踪针对不同环境执行的脚本。所有数据库脚本都需要签入源代码管理,这应该是我们代码唯一的真实来源。
使用 Flyway 的五个原因:
-
Flyway 是免费和开源的。
-
Flyway 轻巧且易于设置。
-
Flyway 提高了数据库变更的自动部署。
-
Flyway 使数据库当前状态清晰明了。
-
Flyway 允许你从头开始重新创建数据库——它跟踪针对特定数据库环境执行的 DDL/DML 脚本。
如何在你的项目中启用 Flyway?
在 build.gradle 文件中的依赖项下包含 flyway 依赖项
compile group: ‘org.flywaydb’, name: ‘flyway-core’, version: “$project.ext[‘flywayVersion’]”
在 application.yml 文件中包含 flyway 设置
flyway:
enabled: true
schemas: <db_schema_name>
locations: classpath:/sql
该工具的工作方式是使用 SQL 脚本扫描适当的文件夹,并在项目启动期间对你的数据库执行SQL 脚本。
Flyway是如何运作的呢?
如果您想在另一个环境中启动一个新的数据库实例,Flyway 可以轻而易举地为您完成。在应用程序启动时,它会尝试与数据库建立连接。如果它不能,它会抛出一个错误。
它可以帮助您轻松地发展您的数据库架构,并且在所有情况下都是可靠的。无需手动执行数据库脚本。
每次需要升级数据库时,无论是架构(DDL)更改还是数据(DML)操作,你都可以简单地创建一个版本号高于当前版本号的新迁移脚本。当 Flyway 启动时,它会找到新的脚本并相应地执行脚本升级数据库。
Flyway在您的数据库中创建一个表名“ schema_version ”。该表负责跟踪数据库的状态,并为已执行的各种sql脚本保留显式记录。随着每次迁移的应用,架构历史记录表都会更新。
使用 Flyway 时要记住的事情
请勿修改已部署的 SQL 文件。如果您想部署现有脚本的微小变化,请确保创建一个新的 sql 文件。
SQL 文件的命名约定,记下双下划线 - 序列和描述之间的分隔符。
V<version_sequence>__description_of_the_script.sql
Flyway 支持哪些数据库?
支持的数据库有 Oracle、SQL Server(包括 Amazon RDS 和 Azure SQL 数据库、DB2、mysql(包括 Amazon RDS、Azure 数据库和 Google Cloud SQL)、MariaDB、PostgreSQL(包括 Amazon RDS、Azure 数据库、Google Cloud SQL 和 Heroku)、 Redshift、CockroachDB、SAP HANA、Sybase ASE、H2、HSQLDB、Derby 和 SQLite。
有关 Flyway 的更多详情,请参阅 https://flywaydb.org
以上是关于Flyway 持续数据库集成的主要内容,如果未能解决你的问题,请参考以下文章
在 Maven 中使用带有 Flyway 和 jOOQ 的嵌入式数据库进行持续集成