BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ジョブの分割とアノテーションによる設定に対応したSpring Batch 2.0

ジョブの分割とアノテーションによる設定に対応したSpring Batch 2.0

ブックマーク

原文(投稿日:2009/5/4)へのリンク

Spring Batch フレームワークの最新版はジョブの分割(パーティショニング)、リモートとのチャンク通信(リモート・チャンキング)、アノテーションによる設定に対応した。Spring Batchの開発チームは最近バッチ・フレームワークのバージョン2.0をリリースした。さらに新しいバージョンではJava 5への対応や非順次実行などの機能が追加されている。

この(最新)バージョンでの新機能は大きく以下の4つに分類される。Java 5への対応、非順次実行、拡張性の進歩、アノテーション。

Java 5への対応
Spring Batchバージョン2.0はJava 5のジェネリクスや型パラメータに対応し型の安全性をコンパイル時にチェックすることが可能になった。例えばItemReaderインタフェースはタイプセーフ(型の安全性が保証された)なreadメソッドを持っている。

非順次実行
これには3つの新機能(条件付き実行、一時停止と並列実行)が含まれており直線的な順序以外での実行を可能にするので一つのジョブに含まれるステップの一つが失敗してもジョブ全体を終了させることが出来るようになっている。条件付き実行によって直前のステップの 終了ステータスに応じて別のステップを実行させることが出来るようになる。失敗した場合にも分岐処理により継続できるので、一つのステップの失敗はもはやジョブにとって致命的ではなくなる。一時停止は明示的な指示の待機をさせるのに使うことが出来る。これは例えば業務上の重要なデータの正当性を確認するために手作業による介入が必要となる様な業務ルールが存在している場合に役立つ。そして最後に複数のステップの並行実行であるが、これは各ステップがたがいに独立していてどの部分が並行実行できるのかをユーザが特定できる場合に使うことが出来る。

拡張性
新バージョンでは複数のプロセスによる並行実行に2つの方法で対応している。リモート・チャンキングと、パーティショニングである。リモート・・チャンキングというのはデータ構造に関知せずに一つの処理を複数のステップに分割する技術である。一つのプロセスに読み込まれることであらゆる処理が動的に分割され、分割されたそれぞれの要素が断片としてリモートの処理プロセスへ送信される。リモートのプロセスはリスナ・パターンを実装していて、要求に応答し、データを処理してから非同期で結果を返信する。要求と返信の送信は一つの通信相手に対して確実に行われ永続的なものでなければならないが、これらの機能は既にJMSの実装によって提供されている。Spring BatchはSpring Integration上にリモート・チャンキング機能を構築しているので、メッセージ通信用のミドルウェアの実装には関知していない。
もう一つの方法がパーティショニングである。これは主キーの範囲や、処理対象のファイル名といった入力データの構造をある程度理解していないければならないという点で(リモート・チャンキングとは)対照的である。この方法の利点はパーティションに含まれる各要素のプロセッサはあたかもSpring Batchの通常のジョブに含まれる一つのステップを処理しているように振舞うことが出来るという点である。それぞれのプロセッサは特別なパターンを実装する必要がないので、簡単に設定したりテストをすることが出来る。全ての入力データを一カ所で読み込むことに起因するシリアライズ化が不要なのでパーティショニングはリモート・チャンキングより拡張性が高い。Spring Batch 2.0では以下の2つのインタフェースによってパーティショニングに対応している。PartitionHandlerStepExecutionSplitterである。

アノテーションによる設定
リーダ(reader)、ライタ(writer)、プロセッサ(processor)、リスナ(listener)といったSpring Batchのコンポーネントはアノテーションによって設定やステップへプラグインできるようになった。これはSpring Batch用のXML名前空間を使って実現されている。

さらにアプリケーションの監視といった領域でもいくつかの変更がなされており、これには実行またはスキップされた要素の計数や、各段階において読み込み、処理、書き込みに分割された要素の総数といった統計機能が含まれている。実行を読み込み、処理、書き込みに分けないステップ(やタスクレット)にとってこの機能は必須のものというよりは包括的な意味合いとなるだろうが、多くの用途においては要素の総数だけを保存しておくよりは適切だろう。

SpringSourceではパーティショニング、リモート・チャンキング、そして管理機能やスケジューリング機能といった運用時に必要となる機能を全て提供するエンタープライズ向けバッチ製品を計画している。将来のロードマップにはSpring Batch 2.1をSpring 3.0依存にすることも含まれている(Spring 2.5.6もオプションとして対応する)。このバージョンにはSpring式言語(EL)の遅延バインドを使ったジョブやステップの設定という新機能が提供される。この機能はSpring Batch 2.0の遅延バインドと同じ文法だが、より多くの機能があり現行バージョンより柔軟になっている。

この記事に星をつける

おすすめ度
スタイル

BT