Spring Boot Flyway 应对企业不同环境和限制

问题描述 投票:0回答:2

我正在考虑使用 Flyway 为我的 Spring Boot API 进行版本控制数据库迁移。我一直在阅读很多关于它的文章,我发现他们主要谈论设置它,这很棒。

但是,我关心的是典型的企业环境,例如:

  1. 多个部署环境,如 PROD、TEST、DEV。我们没有 例如,查看或修改 PROD 环境数据库的权限。 将数据库迁移委托给 PROD 环境中的工具/库听起来并不令人放心,我们也不允许这样做,而是向 DBA 提供脚本来运行它们
  2. 我们连接到不同的数据库供应商,如 PostGres、Oracle、 同一 API 中的 MSSQL、DB2 z/OS
  3. 在某些情况下,我们将不得不更新已经存在的表格。在 其他情况,我们将不得不创建新表

flyway如何处理这种情况?

spring-boot database-migration flyway
2个回答
2
投票

2 & 3 不是问题。

1 是,我将在最后解决它。

re (2) 连接到不同的数据库:

flyway使用jdbc驱动连接dbs,可以连接很多em。

你可以在这里看到一些示例配置:

re (3) 使用预先存在的数据库/表:

flyway 不是 ORM。它不会将数据库状态或表列映射到代码(类等),也不会尝试将代码匹配或同步到数据库(这是 ORM 提供的)。

flyway 只关心其管理的schema 历史表中的状态

您不必创建“之前”发生的迁移,您只需创建您需要的迁移,然后让 flyway 为您运行它们。

注意 1:您可以在过去创建迁移并通过设置“基线”或换句话说“从哪里开始”告诉 flyway 跳过它们

注 2:您可以通过使用多个目录(每个数据库 1 个)并多次运行 flyway 来处理多个数据库和多个 sql 脚本,每次都使用正确的数据库连接和脚本目录组合配置。

re (1) 没有权限管理数据库的企业环境:

不允许开发人员编写/更改实时环境(有时也不允许其他环境)的情况并不少见。

你必须:

  • 同意您的数据库团队(或任何有权访问的人)的观点,即通过工具实现自动化比手动运行脚本更好,并向他们展示如何使用 flyway(这并不难!!)
  • 使用部署管道自动化(如果存在 CI/CD)来运行迁移。

在任何一种情况下,您都需要拥有凭据/访问权限的人的一些合作和支持。如果你没有那个,那么就没有前进的道路,你就会被他们想要的工作方式困住。


1
投票

我认为 Flyway Teams 做所有这些没有任何问题。我自己在您的列表中使用 2 和 3。您可以在脚本中轻松运行 Flyway,以便每次运行时都使用不同的 JDBC 连接。为了解决问题 1,Flyway Teams 有一个名为“Dry Run”的功能,允许它生成单个脚本而不是执行一系列迁移。当针对 PROD 执行时,此脚本将维护 flyway 模式表。是的,如果 DBA 只想要一个同步脚本而不是一系列迁移,试运行脚本会让他们满意

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.