Код: Выделить всё
// 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();
}
}
- если вызов занимает более 5 минут, он не будет задерживать следующий запланированный вызов (т. е. вызов doSomethingImportant не может заблокировать планирование будущих вызовов самого себя или будущих вызовов других запланированных заданий).
- мы можем установить контекст MDC для каждого призыв задания в классе doSomethingImportant без его прерывания другими вызовами.
Есть сообщение, в котором говорится, что ConcurrentTaskScheduler использует только один поток. В этом случае мы предполагаем, что если все запущенные запланированные задания используют один и тот же поток, могут возникнуть проблемы с производительностью, и нам потребуется создать какой-то механизм для запуска каждого из них в своем собственном потоке? Это может показаться слишком большим количеством стандартного кода, если нам придется добавлять его к каждому плановому заданию (у нас их сотни). Или есть что-то вроде ConcurrentTaskScheduler, которое создает новый поток для каждого задания?
Подробнее здесь: https://stackoverflow.com/questions/793 ... cheduled-t
Мобильная версия