5

問題:サイズが10 MBを超えるファイルを読み取り、SpringBatchを使用してステージングテーブルにロードします。ファイルの読み取り中に状態を維持して、失敗した場合にジョブを再開するにはどうすればよいですか?

ドキュメントによると、FileItemReaderはスレッドセーフではなく、スレッドセーフにしようとすると、再起動性が失われます。したがって、基本的な質問は次のとおりです。

  1. ファイルをブロック単位で読み取る方法はありますか?各スレッドは、読み取る必要のあるブロックを認識していますか?
  2. 読み取りを同期化する場合、このシナリオでジョブを再開可能にするには、どのような変更が必要ですか?

誰かが同様の問題に直面したり、それがどのように機能するかを分析したりした場合は、私たちが決定を下すのに役立ちます。

また、ポインタやサンプルコードもありがたいです。

4

1 に答える 1

3

マルチスレッドは、複数のスレッドが同時に異なる処理を行っている場合にのみ役立ちます。たとえば、2 つのスレッドを別々の CPU で実行できます。または、一方のスレッドがネットワーク メッセージを待機しているときに、もう一方のスレッドが画面を描画している可能性があります。

しかし、あなたの場合、両方のスレッドが同じデバイスからの同じ IO を待っているので、複数を使用しても意味がありません。

この質問も参照してください複数のスレッドによるファイルの読み取り

于 2011-10-03T08:24:03.630 に答える