7

Spring-Batchを使用して、データベースにいくつかのオブジェクトを作成し、これらのオブジェクトからファイルを作成してから、ファイルを FTP サーバーに送信するバッチを実行しています。

したがって、2 つの手順があります。DB から conf を読み取り、DB に挿入してファイルを作成します。2 つ目は、ファイルを FTP サーバーに送信します。

問題は、FTP サーバーに問題がある場合、トランザクションをロールバックできないことです(DB への新しい挿入をキャンセルするため)。

異なるステップで 1 つのトランザクションのみを使用するようにジョブを構成するにはどうすればよいですか?

4

2 に答える 2

3

これは、Spring-Batch のトランザクションの性質上、悪い考えです。
私見の簡単な解決策は、ジョブの開始時に生成されたトークンでステップ 1 で保存されたデータをマークし、FTP アップロードが失敗した場合は、クリーンアップ ステップに移動して、トークンを含むすべてのデータを削除することです。

于 2013-09-26T15:23:21.660 に答える
2

bellabax に同意します。これは悪い考えです。

ただし、この手順も失敗してトランザクションがロールバックされない可能性があるため、3 番目のクリーンアップ手順は実行しません。

エントリがまだ FTP に送信されていないことを示すフラグで、挿入されたエントリをマークできます。3 番目のステップでは、フラグを切り替えて、これらのエントリが FTP に送信されたことを示します。

次に、cron/batch/4 番目のクリーニング手順/FTP に送信されていないすべてのエントリを削除するものが必要です。

于 2013-09-26T16:00:23.167 に答える