봄에 일정이 겹치지 않게 하는 방법은?
@Scheduled(fixedDelay = 5000)
public void myJob() {
Thread.sleep(12000);
}
이전 루틴이 아직 완료되지 않은 경우 이 스프링 작업이 실행되지 않도록 하려면 어떻게 해야 합니까?
기본적으로 spring은 단일 스레드 Executor를 사용합니다.따라서 두 @Scheduled 작업이 중복되지 않습니다.전혀 관련이 없는 클래스의 @Scheduled 메서드 두 개라도 모든 @Scheduled 작업을 실행할 수 있는 스레드가 하나밖에 없기 때문에 중복되지 않습니다.
또한 기본 Executor를 스레드 풀 기반의 Executor로 교체하더라도 해당 Executors는 일반적으로 이전에 예약된 인스턴스가 완료될 때까지 태스크 인스턴스의 실행을 지연시킵니다.고정된 지연, 고정된 경우에 해당됩니다.인터벌, 크론 기반 스케줄.예를 들어, 이 스프링 구성을 사용하면 예약을 생성합니다.스레드 풀을 사용하지만 원하는 대로 동일한 일정의 동시 인스턴스를 허용하지 않는 스레드 풀 실행기:
@Configuration
@EnableScheduling
...
public class MySpringJavaConfig {
@Bean(destroyMethod = "shutdown")
public Executor taskScheduler() {
return Executors.newScheduledThreadPool(5);
}
...
}
이것은 예정된 자바독입니다.ThreadPoolExecutor::scheduleAtFixedRate: 다음을 지정합니다.
이 작업의 실행이 해당 기간보다 오래 걸릴 경우 후속 실행이 늦게 시작될 수 있지만 동시에 실행되지는 않습니다.
참고: 이 기능은 @Async 작업에는 적용되지 않습니다. spring은 필요한 만큼의 동시 인스턴스를 생성합니다(풀에 충분한 스레드가 있는 경우).
와 함께fixedDelay
, 기간은 업무 종료 후에 측정하므로 걱정하지 마십시오.
언급URL : https://stackoverflow.com/questions/24033208/how-to-prevent-overlapping-schedules-in-spring
'programing' 카테고리의 다른 글
dd/mm/yyyy 문제를 정렬할 수 있는 날짜 (0) | 2023.09.09 |
---|---|
MySQL의 상관된 하위 쿼리에서 메인 where stmt에 "column"을 포함할 수 없음 (0) | 2023.09.09 |
HTML 버튼의 텍스트를 고정된 너비로 래핑하는 방법은? (0) | 2023.09.09 |
@Input()을 사용한 각도2 단위 테스트 (0) | 2023.09.09 |
Management Studio 2012용 Poor Mans T-SQL 포맷 애드인이 Management Studio 2014에서 작동합니까? (0) | 2023.09.09 |