Как я могу динамически увеличивать количество потоков в Spring Batch с помощью ThreadPoolTaskExecutor, не отклоняя входяJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу динамически увеличивать количество потоков в Spring Batch с помощью ThreadPoolTaskExecutor, не отклоняя входя

Сообщение Anonymous »

У меня есть весеннее пакетное приложение, которое отвечает за несколько десятков заданий, которые выполняются с использованием планирования cron.
У меня возникали проблемы, когда некоторые задания не выполнялись. , и я думаю, это потому, что мне не хватало TaskExecutor, из-за чего мой JobLauncher запускал задания синхронно.
Я включил ThreadPoolTaskExecutor со следующей конфигурацией компонента:

Код: Выделить всё

@Bean
fun taskExecutor(): TaskExecutor {
val executor = ThreadPoolTaskExecutor()

executor.corePoolSize = 1
executor.maxPoolSize = 4
executor.keepAliveSeconds = 600
executor.queueCapacity = 1

return executor
}
Что я здесь заметил, так это то, что потоки создаются, когда очередь превышает 1 задачу, до тех пор, пока общее количество потоков не достигнет 4 — после этого выдается исключение, и я не могу добавить в очередь еще задачи (4 обрабатываются и одна в очереди).
Полагаю, это имеет смысл, поскольку я установил емкость очереди, равную 1, но мое желаемое поведение заключается в том, что в очередь может быть поставлено «бесконечное» количество задач, при этом выполняется максимум 4 потока, пока количество доступных задач для работы не упадет ниже моего максимума.
Есть ли способ сделать это с помощью ThreadPoolTaskExecutor или что-то подобное?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -a-threadp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»