@Scheduled fixedRate와 fixedDelay 차이
조회 0 · 댓글 0
Spring의 @Scheduled로 주기 작업을 걸 때 fixedRate와 fixedDelay를 자주 헷갈립니다. 공식 문서 기준으로 두 값의 기준점이 다릅니다. fixedRate는 각 실행의 시작 시각 사이를 재고, fixedDelay는 직전 실행이 끝난 시각부터 잰 뒤 다음 실행을 시작합니다. 즉 작업이 오래 걸리면 fixedRate는 간격을 유지하려 하고, fixedDelay는 끝난 뒤 그만큼 더 쉽니다.
값의 단위는 기본이 밀리초입니다. 초 단위 등으로 쓰려면 timeUnit 속성을 지정합니다. 첫 실행을 늦추려면 initialDelay를 같이 줍니다.
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.SECONDS)
public void doSomething() { ... }
@Scheduled(initialDelay = 1000, fixedRate = 5000)
public void poll() { ... }한 가지 주의점이 있습니다. 스케줄러의 기본 스레드 풀은 스레드가 하나입니다. 그래서 fixedRate라도 작업이 간격보다 오래 걸리면 겹쳐서 병렬로 돌지 않고 순차로 밀립니다. 동시에 돌려야 한다면 풀 크기를 늘려 스케줄러를 따로 설정해야 합니다.
🔗 https://docs.spring.io/spring-framework/reference/integration/scheduling.html
로그인 후 답글을 남길 수 있습니다.