1

春のバッチで、1 つのリーダーにデータを読み取らせ、そのデータを複数のライターに分割して処理を並列実行させることは可能ですか?

手順: Reader : JdbcCursorItemReader は 100 レコードを読み取ります。 10 Parallel Writers: 各 ItemWriter は 10 レコードを取得して処理します。

私は見てきました:

CompositeItemWriter : アイテムをライターに均等に分割する必要がある場合、すべての読み取りアイテムをすべてのライターに渡すようです。

BackToBackPatternClassifier : アイテムを均等に分割しているので、分類子は本当に必要ありません。

1 つのリーダーと複数のライターを持つ別の方法はありますか?

または、 Writer でスレッドを手動で作成できますか?

4

3 に答える 3

7

「複数のライター」とはどういう意味ですか?

あなたが達成しようとしているのは、複数のライターではなく、複数のスレッドを持つ単一のライターのようです。

明確にするために、「複数のライター」について話しているときは、リーダーがチャンクを読み取り、チャンクに対して異なる種類の「書き込み」を行う必要があることを意味します。たとえば、どこかからプレーヤーを読み取る PlayerRecordReader があり、DB とファイルに書き込む PlayerDbWriter と PlayerFileWriter があるとします。複数ライタは負荷分散用ではありません。

書き込みを並行して行う場合、必要なのは単一のライター (もちろん、スレッドセーフにする必要があります) と、ステップ定義でエグゼキューターを使用することです。Spring Batch のこのページでは、その方法を明確に説明しています。 http://static.springsource.org/spring-batch/reference/html/scalability.html#multithreadedStep

于 2013-06-19T01:40:08.130 に答える
0

Writer ロジックを MyWriterRunnable と呼ばれる Runnable クラス (Thread クラス) に移動し、MyWriter クラスで項目 List を手動で 10 個のバッチに分割し、バッチごとに MyWriterRunnable を呼び出しています。

于 2013-06-19T03:08:13.403 に答える