SpringBatchのStepの多重実行 その1

■ Step interfaceのStepをCtrl+Tすると、AbstractStepってクラスがいて、 FlowStep, JobStep, PartitionStep, TaskletStepってのがいます。 JobStepはシンプルに実行するだけっぽいので、 多重実行っぽい名前のPartitionStepを見ていくことにします。   ■ PartitionStep Splitterっていう分割用なアレを渡して実行すると、パラレルに流れてくれそうです。 全部のスレッドが終わるまでまって、それぞれの結果が格納されたコレクションで帰ってくる。

// Wait for task completion and then aggregate the results
Collection executions = partitionHandler.handle(stepExecutionSplitter, stepExecution);

PartitionHandlerのhandleメソッドでその辺が実装されてそうですので続きを見ていきます。   ■ PartitionHandler これもインターフェースで、Ctrl+Tすると、 TaskExecutorPartitionHandlerってヤツが出てきます。 XMLにgridSizeってプロパティで指定した値を使って分割しそうです。 ってことで分割してるとこを見ていきます。   ■ StepExecutionSplitter こいつもインタフェースで実装はSimpleStepExecutionSplitterがやってます。 splitメソッドの中で、getContextsって形で分割して取ってくるようです。 この中ではファイルやDBの中身をボッコリ、オブジェクト作ってContextに乗っけちゃう~ とかっていう痛い感じではなく、StreamをサポートするItemReaderが、 いい感じでExecutionContextにセットしてくれそうです。 ここはキモなところな感じもしますし、ファイルやらJDBCやらHibernateやらiBATISやら っていろんなのが絡んでくるところなので、別途時間確保して読み進めるとします。 で、TaskExecutorPartitionHandlerに戻って、、   ■ TaskExecutorPartitionHandler java.util.concurrent.Future とか FutureTaskとかってのが出てくるんですが、 存在そのものを知りませんでした。 明日J2SE5.0 虎の穴のConcurrency Utilitiesのところ読んで勉強します。。 生成したTaskを元にtaskExecutorが実行~みたいになってるのですが、 JobLauncherの時はRunnableだったのに、こっちはなんでCallableなんだ?とか。 さすがにマルチスレッドなところ不勉強すぐる。俺。。orz 今までコピペでしか書いてこなかったもんな。。。汗 ちなみに、このクラスのexecutorは SyncTaskExecutor です。   =====   こういうソース読んでくと勉強になるなぁ。 自分の不勉強がエラいこっちゃな感じなので、明日ググりつつ読み進めていきます。 習得するのも大変そうなフレームワークだけど、型にハメて後々楽出来るように。。