2 つのステップでスプリング バッチ ジョブを実行する必要があるとします。ステップ 1 は、postgres テーブルからデータを読み取り、同じテーブルの値を更新することです。ステップ 2 は、別の postgres テーブルからデータを読み取り、このテーブルを更新することです。このシナリオのジョブ レベルでトランザクションを達成するにはどうすればよいですか?
つまり、2 番目のステップが失敗した場合は、最初のステップをロールバックする必要があります。
2 つのステップでスプリング バッチ ジョブを実行する必要があるとします。ステップ 1 は、postgres テーブルからデータを読み取り、同じテーブルの値を更新することです。ステップ 2 は、別の postgres テーブルからデータを読み取り、このテーブルを更新することです。このシナリオのジョブ レベルでトランザクションを達成するにはどうすればよいですか?
つまり、2 番目のステップが失敗した場合は、最初のステップをロールバックする必要があります。
信頼できる(またはデータベース側で多くのリソースを必要としない)自動連鎖/マルチレベルトランザクション処理を備えたソリューションが存在するかどうかはわかりません
2 番目のステップが失敗した場合は、最初のステップをロールバックする必要があります
両方のステップを 1 つにまとめることができます。
テーブル B の読み取りは、テーブル a のカーソルベースの読み取りに対して単一の読み取りになるため、パフォーマンスは大幅に低下します。
私はこのような補償戦略をとります
ジョブレベルのトランザクションの使用を検討しましたか?
Spring Batch のジョブレベルのトランザクション性
制限外のコミットまたはロールバックを回避するために、管理している潜在的なボリューム サイズを考慮することが重要です。
ステップ 1の前にBEGINステートメントを置き、ステップ 2の後に COMMIT ステートメントを置きます。