我正在考虑使用 Flyway 为我的 Spring Boot API 进行版本控制数据库迁移。我一直在阅读很多关于它的文章,我发现他们主要谈论设置它,这很棒。
但是,我关心的是典型的企业环境,例如:
flyway如何处理这种情况?
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 Teams 做所有这些没有任何问题。我自己在您的列表中使用 2 和 3。您可以在脚本中轻松运行 Flyway,以便每次运行时都使用不同的 JDBC 连接。为了解决问题 1,Flyway Teams 有一个名为“Dry Run”的功能,允许它生成单个脚本而不是执行一系列迁移。当针对 PROD 执行时,此脚本将维护 flyway 模式表。是的,如果 DBA 只想要一个同步脚本而不是一系列迁移,试运行脚本会让他们满意