我有一个与 Flyway DB 迁移相关的问题。如何通常管理处理相同数据库模式的多个项目(微服务)。每个项目中的Flyway迁移脚本如果被其他项目修改则不允许启动。他们有相关的文档或最佳实践吗?
我们正在这样做。我们有一个中央项目来管理模式创建/管理,其他项目则通过自己的 Flyway 版本控制来处理自己的函数创建。这是通过更改其他项目检查其架构版本所依据的表的名称,并将迁移基线设置为
true
来完成的。我们正在使用 spring/flyway-db 配置,因此除了第一个项目之外,只需将以下内容添加到每个项目的 application.properties
即可。
flyway.baselineOnMigrate=true
flyway.table=schema_version_*<some_other_identifier>*
我知道你的问题没有明确指定 spring 配置,但我相信无论你如何使用 Flyway,都可以配置它。我想发布一个答案,因为当我自己用谷歌搜索这个问题时,你的问题是最重要的结果,我认为我的答案可能会帮助某人走上正轨。
不管怎样,这就是我们所做的。由于模式由多个项目共享,因此我们让模式由单个项目管理,该项目的任务是维护所述模式。集中模式创建和维护还有其他好处,因为我们有单一的变更点。我们不需要扫描多个项目的更改。
老实说,我认为这是最好的解决方案。我不相信 Flyway 具有项目间模式依赖性管理。
如果任何人使用 Play 框架,这个问题可以通过每个微服务的独立 Flyway 历史表来解决,这意味着每个微服务都有自己的 Flyway 历史表,其名称根据服务而定。这将为每个服务创建飞行路线表 在conf文件中添加这些属性以更改flyway表名称。
db.default.migration.table=microservice1 for 1 mircoservice
db.default.migration.table=microservice2 for 2 mircoservice
在每个微服务conf文件中添加此属性 这仅适用于游戏框架工作
我遇到了同样的问题,因为我正在使用 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 )
对于微服务架构(或两个不同的项目),
如果两个不同的微服务需要与数据库连接,那么我们需要创建两个不同的模式,因为根据微服务架构,两个不同的微服务连接到不同的模式(不同的数据库)。
喜欢,
由于这个flywayDB在每个模式上维护每个微服务flywayDB迁移历史,所以由于这种情况,flyway DB可以工作
通过使用以下代码创建另一个架构表,
spring.flyway.table=flyway_schema_history_microserive1
spring.flyway.table=flyway_schema_history_microserive2