3

Eclipse ワークスペースの 2 つの異なるプロジェクトで Flyway の 2 つの異なるインスタンスを作成しました。

それらは異なるデータ ソース/2 差分データベースを指しており、別の src.main.resources.db.migration パッケージも持っています。各パッケージには、それぞれのデータベース用の異なる sql ファイルが含まれています。

アプリケーションを起動すると、Flyway は 1 つのプロジェクト (最初に初期化されたプロジェクト) からのみスクリプトを識別し、このプロジェクトのスクリプトを他の DB に対しても実行します。

Flyway が 2 つのデータベースを同時に更新することは可能ですか?


返信いただきありがとうございます。しかし、これを Java コードで実装する方法を説明していただけますか。例:現在、私は次の方法を使用しています...

            Flyway flyway = new Flyway();               
            InitialContext ictx = new InitialContext();
            DataSource dataSource = (DataSource) ictx.lookup("DS-name");
            flyway.setDataSource(dataSource);
            flyway.setLocations("main.resources.db.migration");//location under first project
                flyway.migrate();

                 Flyway flywaygen =  new Flyway;

            InitialContext ictx = new InitialContext();
            DataSource dataSource = (DataSource) ictx.lookup("DS-name");
            flywaygen.setDataSource(dataSource);
            flywaygen.setLocations("main.resources.emlogis.migration");//location                       under second project
                flywaygen.migrate();

問題は、flywaygen も最初のプロジェクトの場所を検討していることです。したがって、最初の場所に 3 つの SQL スクリプトが追加され、2 番目の場所に 2 つのスクリプトが追加された場合、2 番目のフライウェイ インスタンスは移行 3 が完了したことを示します。そのため、flywaygen も main.resources.emlogis.migration ではなく main.resources.db.migration を指しています。

4

1 に答える 1

1

2 番目のフライウェイ Bean を定義します。次に、両方の flyway Bean に別のSqlMigrationPrefixプロパティを追加し、それに応じて移行スクリプトに名前を付けます。

例えば

<bean class="com.googlecode.flyway.core.Flyway" init-method="migrate">
   <property name="dataSource" ref="dataSource1" />
   <property name="sqlMigrationPrefix" value="DB1_" />
</bean>
<bean class="com.googlecode.flyway.core.Flyway" init-method="migrate">
   <property name="dataSource" ref="dataSource2" />
   <property name="sqlMigrationPrefix" value="DB2_" />
</bean>

移行スクリプトは、次の命名規則に従う必要があります。

DB1_1.0__initial_setup.sql
DB1_1.1__new_column.sql

DB2_1.0__initial_setup.sql
DB2_1.1__new_column.sql

編集 - コードによる構成:

あなたのコードには、2 つの Flyway インスタンスがあります。このインスタンスは、Spring Bean としての定義に相当します。したがって、次のように呼び出して同じことを達成できます。

flyway.setSqlMigrationPrefix("DB1_");
flywaygen.setSqlMigrationPrefix("DB2_");
于 2012-11-29T12:30:22.543 に答える