3

インバウンド データの JPA ソースをポーリングするための有用な例が見つかりません。XML でこれを行う方法は知っていますが、DSL で行う方法がわかりません。

要するに、私がやりたいことは、定期的にレコードの JPA リポジトリをポーリングし、通常のフィルタリング/変換/実行を行うフローにレコードを入れることです。

敬具

デビッド・スミス

4

2 に答える 2

3

その通りです。Spring Integration Java DSL にはまだ JPA コンポーネントのサポートがありません。この問題について気軽にJIRA (コンポーネント)を上げてJavaDSLください。この要求に対応します。こちらも気軽に投稿してください!

それまでの間、高レベルの API を使用せずにそれを行う方法を理解するのを手伝うことができます。

はおよびオブジェクト<int-jpa:inbound-channel-adapter>に基づいています (まさにそれらを DSL API に使用します)。次のように構成して使用するだけです。JpaPollingChannelAdapterJpaExecutor@BeanJpaExecutor

@Bean
public JpaExecutor jpaExecutor(EntityManagerFactory entityManagerFactory) {
     JpaExecutor jpaExecutor = new JpaExecutor(entityManagerFactory);
     jpaExecutor.setJpaQuery("from Foo");
     ....
     return jpaExecutor;
}

@Bean
public IntegrationFlow jpaFlow(JpaExecutor jpaExecutor) {
    return IntegrationFlows.from(new JpaPollingChannelAdapter(jpaExecutor))
                      .split()
                      .transform()
       ....
}

それ以外はすべて、既存の DSL コンポーネント API の通常どおり、フレームワークによって行われます。

アップデート

プログラムでJpaPollingChannelAdapterを作成するときにauto-startup =プロパティを提供する方法は? また、この Bean を取得し、control-bus を使用して .start()、.stop() を呼び出すことは可能ですか?

ゲイリーの答えを見てください。コントロールは、私たちの場合はのLifecycle責任です。そのため、その 2 番目の Lambda 引数を指定し、そこに を設定して、目的に合わせて を注入し、操作できるようにする必要があります。それは実際に実行時に使用できます。EndpointSourcePollingChannelAdapter.autoStartup().id()SourcePollingChannelAdapterJpaPollingChannelAdapteridcontrol-busstart()/stop()

はい、それは本当に実装JpaPollingChannelAdapterであるため、そのクラスの残念な名前に同意します。MessageSource

于 2015-06-12T13:35:48.210 に答える
2

JpaPollingChannelAdapterを として配線して@Bean使用する

IntegrationFlows.from(jpaMessageSource(), 
                      c -> c.poller(Pollers.fixedDelay(1000)))
                .transform(...)
                ...

構成オプションについては、 DSL リファレンスを参照してください。

これは一番上にあります (メッセージ ソースが異なります)。

于 2015-06-12T13:25:09.153 に答える