Springバッチpartitioningを実装しましたが、Partitioner
のpartition()メソッドからMap<String, ExecutionContext> result = new HashMap<>();
を返していました。Springバッチでパーティション化されたステップを注文する
私の要件は、スレーブステップを特定の順序(result
マップへの挿入順序)で開始することであり、これはMap
を超えて発生していません。
私はMap<String, ExecutionContext> result = new LinkedHashMap<>();
を使用しようとしましたが、これも有用ではありません。マップからのスレッドはランダムに開始されます。
マスターステップ構成でSimpleAsyncTaskExecutor
を実行者として使用しており、concurrencyLimit
並列スレッドが開始されています。 concurrencyLimit=1
を設定した場合、最初のスレッドをresult
マップに挿入して開始するなどしてください。
この注文はどのように実装できますか?
パーティショニングは、ワーカーの実行順序を保証するものではありません。彼らは並行して処理する必要があるので、私はあなたがなぜ必要なのか分からない。なぜ特定の順序で実行する必要があるのかを説明できる場合は、代替案を手助けすることができます。 –
基本的には、処理するデータの数が変化する235のクライアントがあります。注文数の多いクライアントを最初に処理する必要があるため、注文が必要です。すべてのクライアントは最終的に処理されますが、スループットを向上させるために最も高いN個のスレッドを最初に開始し、数千のクライアントが数百万のクライアントが終了するのを待っている状況を望んでいません。クライアント。 –
@MichaelMinella:私はパーティーでLinkedHashMapを使用し、Karthik Prasadの答えに示唆されているようにスプリッタを書いています。それは正しいアプローチですか? –