Долгое весеннее запланированное задание - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть определенная задача Spring, определенная в файле context.xml, которая запускается каждую минуту.задача вызывает хранимую процедуру postgres.Время выполнения хранимой процедуры может длиться более минуты.Будет ли среда Spring вызывать тот же планировщик, если текущий запуск не завершился?Спасибо,

1 Ответ

0 голосов
/ 18 декабря 2018

В платформе Spring одна запланированная задача выполняется только одним потоком, если время выполнения превышает интервальный период. Задание будет отложено. Вот простой пример:

@Scheduled(cron = "0/3 * * * * *")
public void work() {
    log.info("begin to do some work,current thread is {}", Thread.currentThread().getName());
    try {
        TimeUnit.SECONDS.sleep(5);
    } catch (InterruptedException e) {
        log.error(e.toString());
    }
}

Я создаюзапланированное задание, ожидаемая последовательность выполнения: 0 3 6 9 ..., но заданию требуется больше времени, поэтому последовательность выполнения: 0 6 12 18 ...

Весной все задачи будут выполняться в потоке(по умолчанию), чтобы уменьшить помехи между задачами, мы можем поддерживать пул потоков для выполнения запланированных задач, например:

@Bean
public ThreadPoolTaskScheduler taskExecutor() {
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(20);
    return scheduler;
}

Другой вопрос о запланированной задаче весной: Spring @Scheduled аннотированметоды запускаются в разных потоках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...