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