2

特定のフォルダーのファイルを非同期的に処理するジョブを取得したSpring Batch管理プロジェクトを使用しています。現在、関連するジョブパラメーターを渡すことにより、バッチ管理UIを介して実行しています。

現在、ファイル インバウンド チャネル アダプターを使用して、このプロセスを自動化しようとしています。ファイルを受信するたびにバッチ ジョブを呼び出すサービス アクティベーターを構成しました。最初のファイル アップロード ジョブが完了したら、別のバッチ ジョブを呼び出すという新しい要件があります。これを行うために、最初のサービス アクティベーターの出力チャネルを使用する別のサービス アクティベーターを作成しました。ただし、バッチ ジョブは非同期で実行されるため、次のバッチ ジョブがすぐに実行されます。最初のバッチ ジョブが完了するまで 2 番目のバッチ ジョブを待機する方法はありますか。

私の現在の構成は

 <file:inbound-channel-adapter id="filesIn" directory="file:${input.directory}" filename-pattern="*.csv" prevent-duplicates="true">
    <integration:poller id="poller" fixed-delay="10000"/>
</file:inbound-channel-adapter>
<integration:channel id="statusChannel"/>

<integration:service-activator input-channel="filesIn" output-channel="statusChannel"
                               ref="handler" method="process"/>

<bean id="handler" class="AnalysisMessageProcessor"> 
    <property name="job" ref="A-importGlobalSettingsDataJob"/> <!--1st job -->
    <property name="requestHandler" ref="jobMessageHandler"/>
</bean>       

<bean id="jobMessageHandler" class="org.springframework.batch.integration.launch.JobLaunchingMessageHandler">
    <constructor-arg ref="jobLauncher" /> <!--spring batch admins async job launcher -->
</bean>                         

<integration:service-activator input-channel="statusChannel" ref="jobHandler" method="process"/>   
<bean id="jobHandler" class="JobHandler"> <!--This Job handler should get invoked only after the 1st batch job is completed. Currently I am just printing the exit status code of 1st job-->

どんな助けでも大歓迎です。

4

1 に答える 1

4

基本的に 2 つのオプションがあります。

  • ジョブの実行ステータスを積極的にポーリングする
  • リスナーを使用したイベント駆動型アプローチで次のバッチジョブ (2 番目の Spring Integration フローの一部?) をトリガーする

最初のアプローチ チェックアウト「リポジトリのクエリ」(Spring Batch リファレンス ドキュメントの一部) の場合:

通常は、2 番目のオプションが最適です。したがって、Spring Batch JobExecutionListenerの使用を検討することをお勧めします。

次の文書の「情報メッセージによるフィードバックの提供」セクションを確認してください。

于 2013-06-19T16:03:22.293 に答える