2016-08-04 11 views
0

メイン質問 - これは基本的なフライウェイの質問のように思えるかもしれませんが、私は研究中にこれを見逃しているかもしれません。フライウェイを使用してデータを移行しようとすると、サービス(スプリング構成)ですか?フライウェイDBマイグレーション - アプリケーションサービスへのアクセス方法(Spring設定済み)

追加の詳細 - - 以下のいくつかの詳細

  • は、私たちは春のデータ・サービスなど(learnt from this SO question)を注入することはできません知っています。そして私は のデータアクセスポイントからこのことを理解しています。
  • しかし、我々は(注射により)、他のアプリケーションサービスを利用することはできません いずれかフライウェイを使用している(私は例の検索 - しかし 運、およびいずれかのフライウェイのドキュメントに与えられていない詳細なし)
  • 私たちが使用することはできません言ってみましょう任意のSpringサービス(そして、私は を回避する方法を見つける)、 application.properties/.ymlで宣言されたプロパティにアクセスできます(どちらも可能ではありません)。
  • 私たちの要件の文脈で上記を置く

- 私たちはいくつかのテーブルに、我々はデータとそれらの列を移入したいリリースの一部として、新たなフィールドをいくつか追加しました。これにより、私たちは、以下のアルゴリズムを実行する必要があります。

  • 最初のテーブルのデータを取得します。
  • 各行のデータの一部を使用して、API コールでさらにデータを検索します。
  • APIのURLは環境固有です(したがって、上記の3番目の点 )。
  • APIから返されたデータを新しく追加された列に更新します。
  • 次の表の手順を繰り返します。

P.S. - 私が知っているのは、同じテーブルの他の列に依存する列を追加することは3番目の法則などではありませんが、このポスト外の理由で必要です。

テックスタック -

  1. 春ブート1.3.xのJavaの移行私は以下のように試してみました

いくつかの例を使用して

  • フライウェイ4.0.3
  • -

    My flyway m igrationクラスは以下の通りです。

    public class R__MigrationYeah implements SpringJdbcMigration { 
    
        @Value("${mypath.subpath}") // this does not work ! 
        private String someStringIwannaUse; 
    
    
        @Inject // this does not work either (even with Autowired or Const. injection)! 
        private MyService myService; 
    
    } 
    

    私はflyways MigrationResolverまたはConfigurationAwareなどを設定する方法の複雑な詳細を持っているいくつかの記事/ブログを見ている - それだけで多くの仕事である - 彼らが行う場合でも、(彼らはこの問題を解決するかどうかわかりませんクイック移行スクリプトを作成する - これが唯一の方法ですか?)

    最後に - 私は、Springを介して既存のアプリケーションクラスを使用することができずにフライウェイJavaコードを記述する必要があるため、独立した移行プロジェクトを作成することと同じですDB接続を利用可能にする以外のフライウェイで追加された値) - これは当てはまりません。

    これにはどんな助けがありますか?

  • +0

    **アップデート** - 最終的に回避策の解決策を使用して終了しました(上記の最後のセクションと@DanielKaferの下の回答)。これは、フライウェイからすぐに入手できないためです。 _P.S。以下の質問や回答が投票に失敗した理由を明確にしていない?私は何かを見逃していますか? –

    答えて

    0

    フライウェイ移行で依存性注入を使用することはできません。

    flywayの次のバージョンは、春の豆からの依存性注入をサポートします。詳細は、Github issueを参照してください。 On Stack Overflowは現在利用可能なバージョンの回避策です。

    -2

    私はあなたが設計したよりも動的にフライウェイを使いたいと思います。 基本的にはDB-Schemaのためだけですが、SQLは何でもできるが、 以来、反復可能で信頼できるステップバイステップの方法で仕事をしているので、 には実際のビジネスデータは含まれていない。 Flywayはあなたが提供する静的なスクリプトを使用します。 は、時間の経過とともに動的に変更することはできません(チェックサムが一致しないと抗議します)か、 "API-Calls"を使用します。

    -2

    あなたは独自のSpring Bootアプリケーションを作成し、それを使ってFlywayをJava APIで使用することができます。この線に沿って何か。

    @SpringBootApplication 
    @Import(ServiceConfig.class) 
    public class FlyWayApp implements CommandLineRunner { 
    
        public static void main(String[] args) { 
         SpringApplication.run(FlyWayApp.class, args); 
        } 
    
        @Value("${mypath.subpath}") 
        private String someStringIwannaUse; 
    
    
        @Autowired 
        private MyService myService; 
    
    
        @Override 
        public void run(String... args) throws Exception { 
         // Create the Flyway instance 
         Flyway flyway = new Flyway(); 
    
    
         // Point it to the database 
         flyway.setDataSource("jdbc:h2:file:./target/foobar", "sa", null); 
    
         //Fetch data and create migration scripts needed by Flyway 
         myService.createMigrationScripts(); 
    
         // Start the migration 
         flyway.migrate(); 
        } 
    } 
    
    関連する問題