3

Spring でビジネス ニーズを実装しようとしていますが、トランザクション管理に関していくつかの問題があります。

ビジネスの必要性は、単純に、
1) いくつかの基準でデータベース (#1) を照会することです。
2) クエリの結果をフラット ファイルに書き込みます。
3) データベース (#1) 内のそれらのレコードを「処理済み」として更新します。
4) 最初の 3 つのステップの結果として、別のデータベース (#2) にレコードを挿入します。

これらの 4 つのステップは、取引を行うために必要です。たとえば、4 番目のステップが失敗した場合、2 番目のステップでフラット ファイルに書き込まれた最後のアイテムをロールバックする必要があります。ファイルのロールバック機構を実装する「Apache Commons File Resource Manager」を見つけました。

私のメンターは、これらの種類のプロジェクトには一般的に Spring Batch を使用するように勧めてくれました。ただし、Spring Batch が「チャンク指向処理」スタイルを採用していることを考えると、Spring Batch で実装するのはかなり難しそうです。私の知る限り、チャンク指向のスタイルでは、チャンク全体に対して2番目のステップを完了する必要があり、実装の3番目と4番目のステップに進むことができます。

このプロジェクトと、この目的で Spring Batch を使用するかどうかについて、一般的なアドバイスが必要だと思います。さらに、そのスタイルではロールバック メカニズムが非常に複雑になるため、これらのニーズを並行環境で実装することをお勧めします。

4

2 に答える 2

3

バッチ処理の目的は、実行しようとしていることを、個別に (順次または並行して) 処理できる小さな作業単位に分割することです。Spring バッチは、Spring の上に構築された柔軟なメカニズムを提供するフレームワークであり、バッチ スタイルの処理を実行できます。要件に基づいて、さまざまな方法で実行するように Spring バッチを構成できます。あなたが言及したチャンク指向の処理は、Spring バッチを使用できる 1 つの方法にすぎません。

あなたが提供した情報を見ると、あなたのアプリケーションの要素は次のとおりです。

  • 処理が必要なデータベースからレコードを読み取る
  • レコードを処理すると、データベース #2 が更新されます
  • レコードを処理済みとしてマークする
  • 処理済みファイルにレコードを書き込む

イベントの順序を少し並べ替えたことに気付くでしょう。説明したロジックは、バッチ スタイルの処理に適したものです。Spring バッチでこの処理を管理する方法の例を次に示します。

  1. 処理するデータベースからレコードを取得します。検索は、カスタム データベース リトリーバーを介して行われます。これらのレコードは、Spring Batch によってレコード セレクターとして使用されます。次に、このリストを反復処理するように Spring バッチを構成します。
  2. ステップ 1 で取得した各レコードを処理するように、Spring バッチの次のステップを構成します。この処理は、個々のレコードを処理し、結果を 2 番目のデータベースに書き込むことで構成されます。
  3. 最後のステップは、個々のレコードの処理を終了することです。ほとんどの Spring フレームワークと同様に、これが発生したときに構成できるさまざまな方法があります。この最後のステップでは、2 つの機能が実行されます。データベース #1 のレコードを処理済みとして更新し、処理済みレコードを出力ファイルに書き込みます。出力ファイルの書き込みは、バッチ プロセス全体の完了時にステップ 4 として実行できます。ここでは、現在の実行中に処理済みとしてマークされたレコードを確認し、必要に応じてデータを書き込みます。

Spring バッチでは、処理全体でトランザクションを管理する方法を構成できるため、すべてのアクションにまたがるトランザクションを構成でき、ファイルの書き込みが失敗した場合は、残りのデータベース操作をロールバックするように構成できます。

このアプローチでは、レコードを順次、並列などで処理できます。ただし、これはすべて、データをより小さな作業単位に分割できることを前提としています。そうでない場合、プロセスが 1 つしかないため、バッチ処理は実際には実行できるものではありません。

Spring バッチを使用するかどうかを決定する簡単な答えがあると言いたいです。いろいろなことができるプラットフォームです。その柔軟性に加えて、学習曲線は比較的高くなります。

お役に立てれば。

于 2011-03-03T19:00:37.800 に答える
0

Springの方法は、トランザクションがコミットされるまでファイルの書き込みを保留するSpringのPlatformTransactionManager抽象化のフラットファイルバージョンを実装することだと思います。難しいことではありません。

于 2011-03-03T13:46:38.480 に答える