PIA 공지사항을 처음에는 버튼 눌러서 수집했다.
근데 계속 확인해야 하는 공지인데 매번 직접 눌러야 하면 의미가 없어서 자동 수집을 붙였다.
그때 사용한 게 @Scheduled.
@Scheduled(
fixedDelayString = "${external-notice.scheduler.fixed-delay:3600000}",
initialDelayString = "${external-notice.scheduler.initial-delay:3600000}"
)
public void runScheduledCollection() {
runCollectionSafely("scheduled");
}
이전 실행이 끝난 뒤 다음 실행까지 기다리는 시간.
기본값은 3600000ms라서 1시간.
수집 시작
→ 수집 종료
→ 1시간 대기
→ 다시 수집
fixedRate처럼 시작 시점을 기준으로 도는 게 아니라 끝난 시점을 기준으로 다음 실행을 기다린다.
첫 실행 전에 기다리는 시간.
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
→ 서버 시작 직후 실행 여부