예약할 메서드를 표시하는 주석입니다.
주석이 있는 메서드에는 인수가 없어야 합니다.
일반적으로 void 반환 유형을 갖습니다. 그렇지 않으면 스케줄러를 통해 호출될 때 반환된 값이 무시됩니다.
@Scheduled 주석 처리는 ScheduledAnnotationBeanPostProcessor를 등록하여 수행됩니다. 이는 수동으로 수행하거나 보다 편리하게 <task:annotation-driven> XML 요소 또는 @EnableScheduling 주석을 통해 수행할 수 있습니다.
이 주석은 반복 가능한 주석으로 사용할 수 있습니다. 이 주석은 속성 재정의로 사용자 정의 구성된 주석을 생성하기 위한 메타 주석으로 사용될 수 있습니다.
어제의 날짜를 구해 API통신을 통해 어제날짜의 데이터를 가져와 DB에 넣는 스케줄러를 하나 구현했는데
아주 바보같은 행동을 해서 기록해 보려한다.
서버인스턴스에 올려 놓았으니 자동으로 스케줄러 돌면서 어제 날짜 구해서 데이터 가져와 DB에 넣겠지?
어제 날짜가 아니라 자꾸 전전날의 데이터를 가져옴
문제는 스케줄러 클래스안 어제날짜를 구하는 로직이 문제였다.
private String queryDate = LocalDate.now().minusDays(1).toString();
본인은 어제 날짜를 구해 상태에 집어넣어 사용했다...즉, 스케줄러의 영향을 전.혀 받지않았다는 뜻....
위 공식문서 발췌 부분을 보면 스케줄러는 메서드에 동작한다. 즉, 스케줄러에 설정한 시간에 해당 메서드를 실행하겠다는 말이다.
코드블럭 처럼 상태로 집어넣게 되면 해당 클래스가 생성될때의 시간에 맞춰 queryDate
가 초기화되고 그 이후에는 전혀 바뀌지 않는다.
서버 인스턴스에 올라갈때 실행되어 그날의 queryDate
를 내일도...그 다음날도...사용하고 있었다...
해당 부분을 메서드화 시켜 해결했다. 자괴감이 드는 하루다