[Spring] @Scheduled 다시 보기

snowballnote·2026년 9월 21일

PIA 공지사항을 처음에는 버튼 눌러서 수집했다.

근데 계속 확인해야 하는 공지인데 매번 직접 눌러야 하면 의미가 없어서 자동 수집을 붙였다.

그때 사용한 게 @Scheduled.

@Scheduled(
        fixedDelayString = "${external-notice.scheduler.fixed-delay:3600000}",
        initialDelayString = "${external-notice.scheduler.initial-delay:3600000}"
)
public void runScheduledCollection() {
    runCollectionSafely("scheduled");
}

fixedDelay

이전 실행이 끝난 뒤 다음 실행까지 기다리는 시간.

기본값은 3600000ms라서 1시간.

수집 시작
→ 수집 종료
→ 1시간 대기
→ 다시 수집

fixedRate처럼 시작 시점을 기준으로 도는 게 아니라 끝난 시점을 기준으로 다음 실행을 기다린다.

initialDelay

첫 실행 전에 기다리는 시간.

initialDelayString =
        "${external-notice.scheduler.initial-delay:3600000}"

기본값은 이것도 1시간.

그래서 서버를 켰다고 바로 수집되는 건 아니다.

서버 시작하자마자 수집하고 싶으면

따로 옵션을 뒀다.

@EventListener(ApplicationReadyEvent.class)
public void runCollectionOnStartup() {
    if (runOnStartup) {
        runCollectionSafely("startup");
    }
}
@Value("${external-notice.scheduler.run-on-startup:false}")
boolean runOnStartup

기본값은 false.

필요할 때만 시작 직후 수집하도록 했다.

스케줄러 자체 끄기

@ConditionalOnProperty(
        prefix = "external-notice.scheduler",
        name = "enabled",
        havingValue = "true",
        matchIfMissing = true
)

external-notice.scheduler.enabled=false로 두면 자동 수집 설정을 끌 수 있다.

이번 코드에서 볼 건 이 정도.

@Scheduled
→ 정해진 주기로 실행

fixedDelay
→ 이전 실행 끝난 뒤 기다리는 시간

initialDelay
→ 첫 실행 전 대기 시간

run-on-startup
→ 서버 시작 직후 실행 여부
profile
개발자로 이 험난한 세상 살아가기

0개의 댓글