3

移行を複数のディレクトリに整理したい場合(たとえば、SQL移行を使用していて、「sql」ディレクトリの下に「main」ディレクトリと「special」ディレクトリがあります)。

したがって、sql/mainの下に「V1.1__some_change」などがあります。

次に、他の移行もsql/specialの下に置きたいと思います。ただし、移行バージョン番号はすべてのディレクトリで区別する必要があります。たとえば、競合が発生するため、sql/specialに「V1.1__some_other_change」を配置できませんでした。

しかし、多くの異なるディレクトリにわたって線形バージョン番号を管理することはそれほど簡単ではありません。この問題を解決するための良いアプローチはありますか?

この質問が明確であることを願っています。

4

2 に答える 2

3

それはすべて、特別が「特別」である理由と、それが「メイン」とどのように関連しているかによって異なります。

それらが同じライフサイクルを持っている場合は、異なる番号付けスキーム(メインでは整数、特別なポイントリリース)を使用するか、共有リソース(ホワイトボード、Wikiページなど)で割り当てられた移行番号を追跡して、簡単に知ることができます。次に利用できるのはこれです。

それらが別々のライフサイクルを持っている場合、それらを追跡する別々のFlywayインスタンスを持つことができます(それぞれが異なるflyway.tableを持ちます)。

于 2013-02-01T07:01:09.770 に答える
3

今日、私は同じような問題に直面しました。Flyway1.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で次の行を使用してdb移行を実行したとき:

Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setLocations("db.migrations.business_partitions");
flyway.migrate();

移行は行われませんでした。

フライウェイのソースコードを少し調べたところ、CompositeMigrationResolverクラスのmergeLocations()メソッドで場所がフィルターで除外されていることが問題であることがわかりました。

ここで、business_partitionsはdb.migrationsのサブフォルダーであり、BaseDirとBasePackageのデフォルト値であるため、私の場所はフィルターで除外されました。

BaseDirとBasePackageを明示的に設定することで回避しました。

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

これらの2つの方法はフライウェイ3で非推奨になることを読みました。したがって、これで問題が解決する可能性もあります。

于 2013-02-21T16:37:54.570 に答える