Создает ли Spring Boot ConcurrentTaskScheduler новые потоки для каждой запланированной задачи или может вызвать блокировJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Создает ли Spring Boot ConcurrentTaskScheduler новые потоки для каждой запланированной задачи или может вызвать блокиров

Сообщение Anonymous »

У нас есть много запланированных заданий Spring Boot 2.7, которые определяются следующим образом:

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

// runs every 5 minutes
@Scheduled(cron =  "0 */ 5 * * * *")
public void doSomethingImportant() {
// work
}

// runs every 10 minutes
@Scheduled(cron =  "0 */10 * * * *")
public void doSomethingElseImportant() {
// work
}
При такой конфигурации:

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

@Configuration
@EnableAsync
public class SchedulerConfiguration {
@Bean
public TaskScheduler taskScheduler() {
return new ConcurrentTaskScheduler();
}
@Bean
public Executor taskExecutor() {
return new SimpleAsyncTaskExecutor();
}
}
Мы хотим, чтобы каждый запущенный doSomethingImportant запускался в своем собственном потоке, чтобы:
  • если вызов занимает более 5 минут, он не будет задерживать следующий запланированный вызов (т. е. вызов doSomethingImportant не может заблокировать планирование будущих вызовов самого себя или будущих вызовов других запланированных заданий).
  • мы можем установить контекст MDC для каждого призыв задания в классе doSomethingImportant без его прерывания другими вызовами.
Т.е. обрабатывает ли ConcurrentTaskScheduler случай, если одно задание cron не завершено до запуска следующих триггеров? Запускает ли каждое задание в новом потоке асинхронно из любого потока, используемого планировщиком для отслеживания времени?
Есть сообщение, в котором говорится, что ConcurrentTaskScheduler использует только один поток. В этом случае мы предполагаем, что если все запущенные запланированные задания используют один и тот же поток, могут возникнуть проблемы с производительностью, и нам потребуется создать какой-то механизм для запуска каждого из них в своем собственном потоке? Это может показаться слишком большим количеством стандартного кода, если нам придется добавлять его к каждому плановому заданию (у нас их сотни). Или есть что-то вроде ConcurrentTaskScheduler, которое создает новый поток для каждого задания?

Подробнее здесь: https://stackoverflow.com/questions/793 ... cheduled-t
Ответить

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

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

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

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

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