Я внедрил весеннюю партию partitioning, и я возвращал Map<String, ExecutionContext> result = new HashMap<>();
из метода partition() Partitioner
.Закажите разделенные шаги в Spring Batch
Мое требование состоит в том, чтобы начать ведомые шаги в определенном порядке (порядок внесения на карту result
), и этого не происходит выше Map
.
Я попытался использовать Map<String, ExecutionContext> result = new LinkedHashMap<>();
, и это тоже не полезно - любая нить с карты запускается случайным образом.
Я использую SimpleAsyncTaskExecutor
как исполнитель в конфигурации мастер-шага и concurrencyLimit
параллельные потоки начинают работу. Если я установил concurrencyLimit=1
, то я хочу, чтобы первая нить вставлена в карту result
, чтобы начать работу и так далее.
Как я могу реализовать этот заказ?
Разделение не предназначено для обеспечения порядка выполнения работником. Поскольку они должны обрабатываться параллельно, я не уверен, что понимаю, зачем вам это нужно. Если вы можете указать, почему вам нужно запускать их в определенном порядке, мы можем помочь с альтернативой. –
В основном у нас есть 235 клиентов с различным количеством обрабатываемых данных. Нам нужен заказ, потому что мы хотим сначала обрабатывать клиентов с наивысшим счетчиком и так далее. В конечном итоге все клиенты будут обработаны, но мы хотим начать с самого начала N-Threads, чтобы иметь лучшую пропускную способность и не хотим иметь ситуацию, когда несколько тысяч клиентов ждут, когда несколько миллионов клиентов закончат. Каждый подчиненный шаг представляет клиент. –
@MichaelMinella: Я использовал 'LinkedHashMap' в своем разделителе и написал разделитель, как это было предложено в ответе Картика Прасада, и это сделало эту работу. Это правильный подход? –