迁移版本
如果我想安排我的迁移在多个目录中(假设我使用的是SQL迁移,和“SQL”目录下,我有一个“主”目录,然后一个“特殊”的目录) 。迁移版本
所以在SQL /主我“V1.1__some_change”等
然后我希望把其他迁移下的SQL /奇特。但是所有目录中的迁移版本号必须是不同的,例如,我不能将“V1.1__some_other_change”放在sql/special中,因为这会导致冲突。
但它不是那么容易管理在许多不同的目录中的线性版本号。有没有解决这个问题的好方法?
希望这个问题是清楚的。
那么这一切都取决于为什么特别是“特殊”以及它是如何与“主”。
如果他们有相同的生命周期你可以使用不同的编号方案(在特殊的主体,发行点整数)或跟踪在共享资源分配的迁移人数(白板,wiki页面,...)以便知道下一个可用的是哪一个。
如果他们有单独的生命周期,您可以分别跟踪它们的Flyway实例(每个实例都有不同的flyway.table)。
今天我面对怎样的一个相同的问题。我更新了Flyway 1.7到2.0.3的最新版本。 我注意到迁移不再像1.7版本中那样工作了。
我们使用基本文件夹的不同子文件夹(db.migrations),以保持不同的数据库方案,其中有独立的生命周期自己schema_version表迁移:
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中使用以下行进行迁移:
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setLocations("db.migrations.business_partitions");
flyway.migrate();
没有迁移完成。
我潜一点在飞路源代码和发现的问题是,位置是在mergeLocations滤出()的类CompositeMigrationResolver方法。
在那里,我的位置过滤掉,因为business_partitions是db.migrations的子文件夹,是对的BaseDir和BasePackage默认值。
我工作围绕通过设置的BaseDir和BasePackage明确:
flyway.setBaseDir("db.migrations.business_partitions");
flyway.setBasePackage("db.migrations.business_partitions");
,我读了这两种方法将在飞行用3被弃用,因此,也许这也将解决我们的问题。
这些方法造成了很多麻烦,并且已经在SCM中消失了。这应该在2.1中再次按预期工作 –
谢谢。他们有相同的生命周期。使用“主要”和“特殊”实际上是一个不好的例子。你对点特别发布的想法可能会奏效,但是所有的目录都具有相同的“重要性”。他们只是为了组织的目的而划分主题。现在我决定只使用完整的日期/时间戳作为版本号,这样它们或多或少地保证是唯一的,并且还可以在所有目录中维护迁移顺序。 – user2009267