单一模式和多个项目的 Flyway 迁移

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

我有一个与 Flyway DB 迁移相关的问题。如何通常管理处理相同数据库模式的多个项目(微服务)。每个项目中的Flyway迁移脚本如果被其他项目修改则不允许启动。他们有相关的文档或最佳实践吗?

flyway
6个回答
18
投票

我们正在这样做。我们有一个中央项目来管理模式创建/管理,其他项目则通过自己的 Flyway 版本控制来处理自己的函数创建。这是通过更改其他项目检查其架构版本所依据的表的名称,并将迁移基线设置为

true
来完成的。我们正在使用 spring/flyway-db 配置,因此除了第一个项目之外,只需将以下内容添加到每个项目的
application.properties
即可。

flyway.baselineOnMigrate=true
flyway.table=schema_version_*<some_other_identifier>*

我知道你的问题没有明确指定 spring 配置,但我相信无论你如何使用 Flyway,都可以配置它。我想发布一个答案,因为当我自己用谷歌搜索这个问题时,你的问题是最重要的结果,我认为我的答案可能会帮助某人走上正轨。


10
投票

不管怎样,这就是我们所做的。由于模式由多个项目共享,因此我们让模式由单个项目管理,该项目的任务是维护所述模式。集中模式创建和维护还有其他好处,因为我们有单一的变更点。我们不需要扫描多个项目的更改。

老实说,我认为这是最好的解决方案。我不相信 Flyway 具有项目间模式依赖性管理。


2
投票

如果任何人使用 Play 框架,这个问题可以通过每个微服务的独立 Flyway 历史表来解决,这意味着每个微服务都有自己的 Flyway 历史表,其名称根据服务而定。这将为每个服务创建飞行路线表 在conf文件中添加这些属性以更改flyway表名称。

db.default.migration.table=microservice1    for 1 mircoservice
db.default.migration.table=microservice2    for 2 mircoservice

在每个微服务conf文件中添加此属性 这仅适用于游戏框架工作


1
投票

我遇到了同样的问题,因为我正在使用 2-3 个微服务,所以我所做的如下 例如,按以下顺序运行

micro-service-1 ( which required migration )
micro-service-2
micro-service-3 ( which required migration )

因此,我在 micro-service-1 中创建了 Flyway 迁移 v1__description.sql,然后在 micro-service-3 中创建了 v1_2__description.sql,因为它位于运行项目序列中的第三个,这是我的发布版本 1,其中有 2 个版本 1 和 1.2 的迁移

micro-service-1 ( V1_description.sql )
micro-service-2 // if in future it reuires migration then we can use, V<<currentVersion>>_1__description.sql
micro-service-3 ( V1_2_description.sql )

0
投票

对于微服务架构(或两个不同的项目),

如果两个不同的微服务需要与数据库连接,那么我们需要创建两个不同的模式,因为根据微服务架构,两个不同的微服务连接到不同的模式(不同的数据库)。

喜欢,

  • 微服务-1 --> 架构-1
  • 微服务-2 --> 架构-2

由于这个flywayDB在每个模式上维护每个微服务flywayDB迁移历史,所以由于这种情况,flyway DB可以工作


0
投票

通过使用以下代码创建另一个架构表,

spring.flyway.table=flyway_schema_history_microserive1

spring.flyway.table=flyway_schema_history_microserive2

© www.soinside.com 2019 - 2024. All rights reserved.