Spring использует одного и того же исполнителя для всех @Scheduled
задач. Который по умолчанию имеет 1 поток, но вы можете создать пользовательский с несколькими.
Ситуация : у меня есть 2 типа заданий, которые я хочу запланировать:
- длительных фоновых заданий: не обязательно запускать их вовремя, не хотят, чтобы все они выполнялись одновременно, и определенно не хотят, чтобы одновременно выполнялось более одного задания (решение: используйтефиксированная задержка с ограниченным пулом потоков
- частые, кратковременные задания, которые должны выполняться по расписанию. (решение: используйте фиксированную ставку с
@Async
)
Проблема : медленные задания в ограниченном пуле прямо против запуска других с @Async
В идеале, у меня было бы 2 отдельных исполнителяЯ мог бы назначить что-то вроде
@Scheduled(delayedRate=600000, executor="longRunningExecutor")
и @Scheduled(fixedRate=5000, executor="rightNowExecutor")
, но я не могу найти ничего поддерживающего что-то вроде этого.
Как я могу обеспечить долгосрочнуюзапущенные задания не забивают пул потоков и не блокируют прямо сейчас?