[SPRING] Spring에서 중복되는 스케줄을 방지하는 방법은 무엇입니까?
SPRINGSpring에서 중복되는 스케줄을 방지하는 방법은 무엇입니까?
@Scheduled(fixedDelay = 5000)
public void myJob() {
Thread.sleep(12000);
}
이전 루틴이 아직 완료되지 않은 경우이 스프링 작업이 실행되지 않게하려면 어떻게합니까?
해결법
-
==============================
1.fixedDelay를 사용하면 작업 완료 후 기간을 측정하므로 걱정할 필요가 없습니다.
fixedDelay를 사용하면 작업 완료 후 기간을 측정하므로 걱정할 필요가 없습니다.
-
==============================
2.기본적으로 Spring은 단일 스레드 Executor를 사용합니다. 두 개의 @Scheduled 작업은 중복되지 않습니다. 전혀 관계가없는 클래스의 두 개의 @Scheduled 메소드도 @Scheduled 작업을 모두 실행하는 단일 스레드 만 있기 때문에 단순히 겹치지 않습니다.
기본적으로 Spring은 단일 스레드 Executor를 사용합니다. 두 개의 @Scheduled 작업은 중복되지 않습니다. 전혀 관계가없는 클래스의 두 개의 @Scheduled 메소드도 @Scheduled 작업을 모두 실행하는 단일 스레드 만 있기 때문에 단순히 겹치지 않습니다.
또한 기본 Executor를 스레드 풀 기반 Executor로 바꾸더라도 Executor는 일반적으로 이전에 예약 된 인스턴스가 완료 될 때까지 작업 인스턴스의 실행을 지연합니다. 이것은 fixedDelay, fixedInterval 및 cron 기반 스케줄에 해당됩니다. 예를 들어,이 스프링 구성은 스레드 풀을 사용하는 ScheduledThreadPoolExecutor를 만들지 만 같은 일정의 동시 인스턴스는 원하는대로 허용하지 않습니다.
@Configuration @EnableScheduling ... public class MySpringJavaConfig { @Bean(destroyMethod = "shutdown") public Executor taskScheduler() { return Executors.newScheduledThreadPool(5); } ... }
다음을 지정하는 ScheduledThreadPoolExecutor :: scheduleAtFixedRate의 javadoc입니다.
참고 :이 기능은 @Async 작업에는 적용되지 않습니다. spring은 필요한만큼 동시 인스턴스를 생성합니다 (풀에 충분한 스레드가있는 경우).
from https://stackoverflow.com/questions/24033208/how-to-prevent-overlapping-schedules-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 인터셉터가 autowired spring beans를 사용하는 Spring 인터셉터를위한 Java 설정 (0) | 2019.01.14 |
---|---|
[SPRING] Spring MVC HandlerInterceptorAdapter를 사용하여 HttpServletResponse에서 응답 바디 로깅 (HTML) 로깅 (0) | 2019.01.14 |
[SPRING] Spring 3.0.5는 속성으로부터 @Value 주석을 평가하지 않는다. (0) | 2019.01.14 |
[SPRING] JUnit을 사용한 유닛 테스트에서 스프링이 자동 와이어 링되지 않음 (0) | 2019.01.14 |
[SPRING] '스프링 - 부트 스타터'항아리는 무엇입니까? (0) | 2019.01.14 |