我们从项目一开始就没有使用Flyway。我们正处于先进的发展状态。专家评审建议在我们的项目中使用 Flyway。
问题是我们也将部分服务(微服务)转移到另一个测试环境中。
正确实施 Flyway 的最佳方法是什么?要求是:
在开发环境中,无需更改已经存在的模式。但所有新脚本都应该使用 Flyway 完成。
在测试环境中,无需更改已经存在的模式。但是,当我们将项目从开发迁移到测试时,测试环境中不可用的内容应该使用 Flyway 自动创建。
当我们迁移到全新的环境(UAT、生产等)时,整个模式应该使用 Flyway 自动创建。
从文档中,我的理解是:
这是正确的方法还是有更好的方法来做到这一点?
问题是我有一个测试数据库,其中有不同的数据集(开发和测试中的数据不同,我想保留两个环境中的数据)。如果是这样,当我们从Dev环境中取出并在每个环境中单独应用它们时,是否可以将DDL和DML分离在不同的脚本文件中?可以根据需要手动添加DML;但有点困惑我是否在做正确的事情。
提前致谢。
所以,这里实际上有两个问题。数据管理和飞行路线管理。
就数据管理而言,是的,这应该是一个单独的事情。数据不断增长。除了简单的查找表之外,尝试从源代码控制管理数据很快就会变得非常成问题。更不用说您在不同的环境中需要不同的数据。这也使得自动化部署变得更加困难(如果您坚持走这条路线,分支将是您的朋友,每个数据集一个分支,然后进行适当的部署)。
您可以在现有项目上实施 Flyway,是的。关键是建立基线。您不必执行上面概述的所有步骤。假设您有一个现有数据库。您必须获取定义该数据库的脚本。该单个脚本应包含所有适当的 DDL(如果需要,还可以包含 DML)。按照 Flyway 标准命名。类似于 V1.0__Baseline.sql。
完成后,您所要做的就是运行:
flyway baseline
Run Code Online (Sandbox Code Playgroud)
这将以您现有的代码库为起点。从那里,您只需按照命名标准创建脚本:V1.1xxx V2.0xxx V53000.1xxx。并运行
flyway migrate
Run Code Online (Sandbox Code Playgroud)
部署适当的更改。
唯一需要注意的是,正如文档所述,您必须确保所有数据库都与您正在创建并标记为基线的 V1.0 相匹配。当您引入新的更改并将其迁移到位时,任何偏差都会导致错误。只要您拥有匹配的基线点,您就应该能够在不同的环境中处理不同的数据,而不会出现任何问题。