2012-03-01 28 views
0

私は次のことを行うSpring Batchアプリケーションを作成しています。誰かが継続的に行を追加する入力テーブル(PostgreSQL DB)があります。これは基本的には追加される作業項目です。これらの行ごとに、別のDBからより多くのデータをフェッチして処理し、次に複数のSQLクエリを複数のテーブルに渡すことができる出力トランザクションを実行する必要があります(これは一貫性の理由から1つのトランザクションにする必要があります)。Spring Batchのチャンク処理は事実上1ステップに制限されますか?

ここで、入力と出力の間の部分はモジュール化されている必要があります。すでに3〜4個の論理的に分離されたものがあり、今後はさらに多くのものがあります。このフローは線形である必要はなく、次に実行される処理は以前の結果に依存する可能性があります。要するに、これは基本的に、ジョブ内のステップを使用して設定できるフローに似ています。

私の主な問題はこれです:通常、単一のチャンク処理ステップはItemReaderとItemWriterの両方を持ちます。すなわち、入力を1ステップで出力します。ですから、すべての処理ステップを単一のItemProcessorの一部として含めるべきですか?どのようにして、単一のItemProcessorをステートフルなワークフローにするのですか?

他のオプションは、各ステップにタスクレットの実装を行い、2つのタスクレットを自分自身で記述して、ItemReaderおよびItemWriterとして動作させることです。

提案がありますか?

+0

私の最初の考えは、これはバッチアプリケーションではありませんが、私は間違っている可能性があります。プロセスの開始や停止があるようには聞こえません。また、 '仕事'を定義するために使用できるパラメータはないようです。これは簡単なJavaアプリのように聞こえる。あなたがSpring Batchを見ている特別な理由は何ですか? – Ickster

+0

あなたは「簡単なJavaアプリケーション」としてどのようにしますか? – Aman

答えて

0

答えが見つかりました - はい、あなたは効果的に1ステップに制限されています。しかし、

1)線形ワークフローの場合、アイテムプロセッサを「チェーン」することができます。つまり、実際の作業を行うすべてのアイテムプロセッサにapplicationContext.xmlを提供できる複合アイテムプロセッサを作成します。複合アイテムプロセッサは、1つずつ実行します。これは私が今やっていることです。

2)内部サブフローを別々のスプリングバッチワークフローとして作成し、上記のコンポジットアイテムプロセッサと同様のアイテムプロセッサでコードを呼び出すことができます。私は将来これに移行するかもしれない。

関連する問題