2016-07-27 28 views
0

processinglarge dataにはspring batchを使用しています。2つのタスクのスプリングバッチ並列処理ですが、2番目のタスクは最初のタスクに依存します

私の問題は、executingone after anotherという異なる2種類のTaskletがあります。私は2番目のタスクレットが最初にいくつかの依存関係を持っているので、それを並列に実行することはできませんTasklet。時間を節約するために、最初に数えてitemsの直後にTaskletを開始したいと思っています。processedによって前にtaskletになりました。 Spring BatchChunk Oriented処理スタイルを使用しているため。 ItemWriterが1つのTasklet、すでに処理されたアイテムのチャンクを別のTaskletItemReaderまたはItemProcessorまたはItemWriterに次の処理のために渡すことはできますか?しかし、もう1つのtaskletchunkで作業している間に、前のtaskletNOTになるはずです。iterationを超えるnextchunkを続ける必要があります。

+0

アイテムごとの依存関係はありますか?単一のリーダーとコンポジットアイテムプロセッサ/ライターを使用できますか? –

+0

@DeanClark次のタスクは、 'ItemWriter'がdatabse内のアイテムのチャックを書き出した後に開始する必要があります。私の次のタスクの 'ItemReader'はデータベースからこれらのアイテムを選ぶでしょうし、そうでなければ次のタスクの' ItemWriter'にアイテムのリストを渡すこともできますが、これらのアイテムは次のステップで処理する前にデータベースにコミットする必要があります。返信いただきありがとうございます。 –

答えて

1

上記の説明と追加情報に基づいて、私は単にこれを達成するためCompositeItemWriterを利用します。

アイテムのリストは、まずWriterOneによって書き込まれ、WriterTwoに渡され、WriterTwoによって書き込まれます。

<bean id="compositeWriter" 
     class="org.springframework.batch.item.support.CompositeItemWriter"> 
    <property name="delegates"> 
     <list> 
      <ref bean="writerOne" /> 
      <ref bean="writerTwo" /> 
     </list> 
    </property> 
</bean> 

<bean id="writerOne" ... /> 
<bean id="writerTwo" ... /> 
+0

これは可能でしょうか? 'writerTwo'がアイテムのチャンクで処理しているとき、' Tasklet'は待たずに 'ItemReader'は' next chunk'の間に 'iteration'を続けるべきですか?あなたが気づいた場合、私の質問では、私はまた、 '別のタスクレットがチャンクで作業している間、前のタスクレットは待たずに次のチャンクで繰り返し続けるべきです。どうもありがとうございました。 –

+0

2番目の操作( 'writerTwo'によって実行される操作)が最初の操作よりもはるかに時間がかかることが懸念されますか?通常、レコードとこれに付属するIOを再読み込みして解析するオーバーヘッドは、2つの同期ライターを使用するよりも、同じデータを2回読みにくくします。 –

関連する問題