2017-12-05 14 views
2

フライウェイプラグインを使用していくつかのデータベーステーブルを作成するGradleスクリプトがあります。このスクリプトは2つの別々のフライウェイスクリプトセットで動作するように更新する必要があります。別のデータベースを更新します。スクリプトの単一データベースのバージョンで複数のデータベースを更新するためのフライウェイトスクリプト

私は単純に次の操作を行います。

task flywayMigrate2 << { 
    ext { 
     flyway { 
      url = 'jdbc:edb://localhost:5432/mydb2' 
      schemas = ['my_schema2'] 
      user = 'my_user2' 
      password = 'my_pass2' 
      locations = ['filesystem:src/main/resources/db/flyway/my_db2'] 
     } 
    }  
} 

flywayMigrate2.finalizedBy flywayMigrate 
:私は2番目のDBのためのスクリプトを実行する新しいタスクを宣言して実験してきた

flyway { 
    url = 'jdbc:edb://localhost:5432/mydb' 
    schemas = ['my_schema'] 
    user = 'my_user' 
    password = 'my_pass' 
    locations = ['filesystem:src/main/resources/db/flyway/my_db'] 
} 

私のGradleのスキルが悪いですが、これは正しい方法ではないことが分かりました。私の理解では、extブロックが元のフライウェイの設定を上書きするので、flywayMigrateの後にflywayMigrate2を実行したければ、元のセットに戻すのではなく、設定値のセットを使用します。

私はこれを行う必要がある最初の人になることはできませんが、まともなアプローチを見つけるのに苦労しています。

答えて

2

flyway { ... }拡張オブジェクトは、すべてのフライウェイタスクに共通のプロパティを構成するためのものです。各タスクには設定可能なプロパティもありますが、flyway { ... }拡張オブジェクトで設定されているプロパティをタスクレベルのプロパティが上書きすると思います。

私はあなたのビルドに2つのFlywayMigrateTaskインスタンスを設定すると思います。Gradleの

import org.flywaydb.gradle.task.* 

task migrate1(type: FlywayMigrateTask) { 
    url = 'jdbc:edb://localhost:5432/mydb1' 
    user = 'user1' 
    locations = ['filesystem:src/main/flyway/db1/migration'] 
    // etc 
} 

task migrate2(type: FlywayMigrateTask) { 
    url = 'jdbc:edb://localhost:5432/mydb2' 
    user = 'user2' 
    locations = ['filesystem:src/main/flyway/db2/migration'] 
    // etc 
} 

も参照してくださいAbstractFlywayTask.java

1

第2のフライウェイ構成を導入するために、別のGradleタスクを定義する必要はないと思います。

あなたは、単に外部のフライウェイの設定

gradle -Dflyway.configFiles=path/to/myAlternativeConfig.conf flywayMigrate 

フライウェイのGradleプラグインを

gradle -Pflyway.user=myUsr -Pflyway.schemas=schema1,schema2 -Pflyway.placeholders.keyABC=valXYZ 

またはシステムプロパティ

gradle -Dflyway.user=myUser -Dflyway.schemas=schema1,schema2 -Dflyway.placeholders.keyABC=valueXYZ 

のGradleプロパティを使用するか、または提供するいずれかの上書きができdocumentationによると、次の設定に従いますオーダー:

  1. システムプロパティ
  2. 環境変数
  3. カスタム設定ファイル
  4. のGradleプロパティ
  5. build.gradle
  6. <user-home>/flyway.conf
  7. フライウェイのGradleプラグインのデフォルト
  8. でフライウェイ構成セクションを

また、FlywayのGradleプロパティを上書きする新しいタスクを導入することもできます。

task migrate2(FlywayMigrateTask) { 

    project.ext['flyway.user']='myUsr' 
    project.ext['flyway.password']='mySecretPwd' 
    project.ext['flyway.schemas']='schema1,schema2,schema3' 
    project.ext['flyway.placeholders.keyABC']='valueXYZ' 
    project.ext['flyway.placeholders.otherplaceholder']='value123' 

} 
+0

おかげで、私は、コマンドラインに渡されるのではなく、フライウェイ構成値はビルドスクリプト内に含まれる必要があります。私はあなたのproject.extの例は、私のflywayMigrate2タスクと同じことをやっていると思う - タスクが完了した後につかまるグローバル値を上書きする – codebox

関連する問題