2

私はSpring Batchを使用して、データベースから/へのエクスポート/インポートを主に行う多数のバッチジョブを作成しています。Spring Batch ジョブ リポジトリ データベースとターゲット データベース (データの読み取り/書き込みの対象となるデータベース) は、異なるマシン上にあります。

私の質問は、この構成で XA トランザクションを使用する必要があるかどうかです。

ある時点で、ジョブ リポジトリ db へのリンクがブレーキをかけるシナリオについて疑問に思っています。データが破損する可能性はありますか? このような:

  1. ジョブが開始されました (ジョブ リポジトリへの書き込み)
  2. トランザクション内のターゲット データベースでの読み取り/処理/書き込み
  3. ジョブ リポジトリへのリンク db ブレーキとジョブの失敗

最後に、ターゲット データベースを更新しましたが、ジョブが失敗したため、ジョブの再起動時に同じデータが再度処理されます。

4

1 に答える 1

1

Spring Batch には、リーダー/ライター内に暫定的な状態の保存を無効にする機能があります (プロパティsaveStateを false に設定します)。これにより、Spring Batch JobRepository とは独立して処理の状態を管理できます。

あなたの例では、読み取りテーブルで「処理済みフラグ」を維持し、select ステートメントをselect * from x where processed = false. これにより、JobRepository の状態への依存度が低くなります。

詳しく説明しているhttp://static.springsource.org/spring-batch/reference/html/readersAndWriters.html#process-indicatorをご覧ください。

于 2013-01-06T01:06:21.857 に答える