Как предотвратить перекрытие графиков весной?
-
21-12-2019 - |
Вопрос
@Scheduled(fixedDelay = 5000)
public void myJob() {
Thread.sleep(12000);
}
Как я могу предотвратить запуск этого весеннего задания, если предыдущая процедура еще не завершена?
Решение
С fixedDelay
, период измеряется после завершения работы, поэтому не беспокойтесь.
Другие советы
По умолчанию пружина использует однопоточный исполнитель. Таким образом, нет двух задач @ клученных задач никогда не совпадают. Даже два метода @ клученных метода в совершенно неродных классах не будут перекрывать просто потому, что есть только один нить для выполнения всех задач @scheduled.
Кроме того, даже если вы замените исполняющий исполнитель по умолчанию с помощью исполнителя на основе пула нитей, эти исполнители, как правило, будут задерживать выполнение экземпляра задачи до завершения ранее запланированного экземпляра. Это верно для
@Configuration
@EnableScheduling
...
public class MySpringJavaConfig {
@Bean(destroyMethod = "shutdown")
public Executor taskScheduler() {
return Executors.newScheduledThreadPool(5);
}
...
}
.
Вот то Javadoc для планируемогоTREDTREADPoolExecuture :: SchedulatfixedRate , который указывает:
Если какое-либо выполнение этой задачи занимает больше времени, чем его период, то последующие исполнения могут начать поздно, но не будет одновременно выполнять.
Примечание. Эта функциональность не содержит true для