Migration 跨多个目录迁移版本

Migration 跨多个目录迁移版本,migration,version,flyway,Migration,Version,Flyway,如果我想在多个目录中组织迁移(假设我正在使用SQL迁移,在“SQL”目录下,我有一个“主”目录,然后是一个“特殊”目录) 所以在sql/main下我有“V1.1\u一些变化”等等 然后我想把其他迁移也放在sql/special下。但是迁移版本号必须在所有目录中都是不同的,例如,我不能在sql/special中添加“V1.1\u some\u other\u change”,因为这会导致冲突 但是,在许多不同的目录中管理线性版本号并不是那么容易。有没有解决这个问题的好办法 希望这个问题是清楚的 这

如果我想在多个目录中组织迁移(假设我正在使用SQL迁移,在“SQL”目录下,我有一个“主”目录,然后是一个“特殊”目录)

所以在sql/main下我有“V1.1\u一些变化”等等

然后我想把其他迁移也放在sql/special下。但是迁移版本号必须在所有目录中都是不同的,例如,我不能在sql/special中添加“V1.1\u some\u other\u change”,因为这会导致冲突

但是,在许多不同的目录中管理线性版本号并不是那么容易。有没有解决这个问题的好办法


希望这个问题是清楚的

这完全取决于为什么“特殊”是“特殊”的,以及它与“主要”的关系

如果它们具有相同的生命周期,则可以使用不同的编号方案(主编号为整数,特殊编号为发布点),或在共享资源(白板、wiki页面等)中跟踪分配的迁移编号,以便于知道下一个可用的迁移编号


如果它们有独立的生命周期,你可以有独立的Flyway实例来跟踪它们(每个实例都有不同的Flyway.table)。

今天我面临着同样的问题。我将Flyway 1.7更新为最新版本2.0.3。 我注意到迁移不再像1.7版那样有效

我们使用基本文件夹(db.migrations)的不同子文件夹来保存不同数据库方案的迁移,这些数据库方案具有各自的模式版本表和各自的生命周期:

src->main->resources->db.migrations
 ->business_partitions
     -> V1_1__BUSINESS_PARTITION_INDEXES.sql
     -> V1__BUSINESS_PARTITIOS.sql
 ->tech
     -> V1_1__TECH_CERTIFICATES_AND_DECRYPTORS_TABLES.sql
     -> V1__TECH.sql
     -> V2__JMS.sql
 ->view
     -> V1__PARTITION11_DB_CREATION_SCRIPT_VIEWS.sql
当我们今天使用Java中的以下行执行db迁移时:

Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setLocations("db.migrations.business_partitions");
flyway.migrate();
没有进行任何迁移

我深入研究了flyway源代码,发现问题在于该位置在CompositionResolver类的mergeLocations()方法中被过滤掉了

在那里,我的位置被过滤掉了,因为business_分区是db.migrations的子文件夹,是BaseDir和BasePackage的默认值

我通过显式设置BaseDir和BasePackage解决了这个问题:

flyway.setBaseDir("db.migrations.business_partitions");
flyway.setBasePackage("db.migrations.business_partitions");

我了解到这两种方法在flyway 3中将被弃用,因此这可能也会解决我们的问题。

谢谢。它们具有相同的生命周期。使用“main”和“special”实际上是一个坏例子。你的想法是为特殊的网站发布可能会工作,但所有的目录都是真正相同的“重要性”。为了便于组织,它们只是按主题进行划分。现在,我决定只使用完整的日期/时间戳作为版本号,这样或多或少可以保证它们是唯一的,并在所有目录中保持迁移顺序。这些方法造成了很多麻烦,并且已经在SCM中消失了。这应该再次按照2.1中的预期工作